【问题标题】:How to put a textbox into a python tkinter application?如何将文本框放入 python tkinter 应用程序?
【发布时间】:2017-08-09 17:24:02
【问题描述】:

我查看了其他几个问题,但似乎没有一个对我的解决方案有帮助。可悲的是,我认为我不是很聪明。

我知道的基本问题。我决定学习 python,我正在用 tkinter 制作一个基本的应用程序来学习。

基本上,它是一个存储和显示人们驾驶执照详细信息(姓名和到期日期)的应用。我希望它具有的功能之一是名称查找。首先,我需要弄清楚如何将文本框放入我的窗口!

我将在下面发布相关的(好吧,我认为是相关的!)代码:

class search(tk.Frame):


def __init__(self, parent, controller):
    tk.Frame.__init__(self, parent)
    label = tk.Label(self, text="Enter a name to display that individual's details", font=LARGE_FONT)
    label.pack(pady=10,padx=10)     

    label1 = tk.Label(console, text="Name:").pack()
    searchbox = tk.Entry(console)
    searchbox.pack()


    button1 = tk.Button(self, text="SEARCH", command=lambda: controller.show_frame(main))#not created yet
    button1.pack()

    button2 = tk.Button(self, text="HOME", command=lambda: controller.show_frame(main))
    button2.pack()

当然在顶部我有

import tkinter as tk

当我尝试运行它时,我得到“typeobject “search” has no attribute 'tk'”。它工作正常 - 当我单击主窗口上的相关按钮时,搜索窗口将打开。直到我尝试添加条目框。

我在这里做错了什么?我是一个完全的新手,所以我准备好面对我的愚蠢

如果这个问题的格式很糟糕,我也很抱歉,我也是在这里发帖的新手。将所有内容都放入正确的“代码”格式是一种真正的痛苦

【问题讨论】:

  • 哦,类下面的缩进在脚本中是正确的,在这里做起来很痛苦
  • 在这里做起来并不痛苦。只需几秒钟。请花时间修复它。将带有“class”的行一直向左移动。选择所有代码。单击类似于{} 的按钮。

标签: python search tkinter textbox tkinter-entry


【解决方案1】:

我猜您遇到了问题,因为您没有指定布局管理器并通过 console 而不是 self

import tkinter as tk

class Search(tk.Frame):
    def __init__(self, parent=None, controller=None):
        tk.Frame.__init__(self, parent)

        self.pack()  # specify layout manager

        label1 = tk.Label(self, text="Enter a name to display that individual's details")
        label1.pack(pady=10, padx=10)

        label2 = tk.Label(self, text="Name:")
        label2.pack()

        searchbox = tk.Entry(self)
        searchbox.pack()

        button1 = tk.Button(self, text="SEARCH", command=lambda: controller.show_frame(main))
        button1.pack()

        button2 = tk.Button(self, text="HOME", command=lambda: controller.show_frame(main))
        button2.pack()

# Just cobble up the rest for example purposes:

main = None

class Controller:
    def show_frame(self, frame=None):
        pass

app = Search(controller=Controller())
app.mainloop()

【讨论】:

    【解决方案2】:

    首先,使用from tkinter import * 是一种更有效的导入 Tkinter 库的方法,而无需在需要时导入特定的东西。不过,为了回答您的问题,这里是输入文本框的代码。
    t1 = Text(self)

    在文本框中插入文本:t1.insert()

    t1.insert(END, 'This is text') 就是一个例子

    如果你还没有得到它,t1 是我分配给文本框的变量,尽管你可以选择你想要的任何变量。我强烈推荐 tkinter 上的 effbots 教程,我发现它非常有用。这是链接:http://effbot.org/tkinterbook/tkinter-application-windows.htm

    祝你好运!

    【讨论】:

    • from ... import * 被认为是糟糕的风格 (stackoverflow.com/questions/2386714/why-is-import-bad) 并经常导致混乱,尤其是在初学者中 (stackoverflow.com/questions/45502124/…)。
    • 好点 Hannebambel,但考虑到所有 tkinter 都与 gui 严格相关,它会节省时间而不是导入特定项目。
    • 使用import tkinter as tk 是首选方法,因为它可以通过减少版本之间对代码的必要更改来提高 tkinter 版本之间的可比性。
    • 如果你使用import tkinter as tk,你可以防止与其他库的任何重叠导入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2023-03-12
    • 2012-04-08
    • 2014-02-23
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    相关资源
    最近更新 更多