无法使用 tkinter 创建 Entry 小部件

Cannot create Entry widget with tkinter

我在使用 tkinter 创建条目小部件时遇到了一些问题。我已经导入了必要的模块并且已经创建了几个按钮和复选框。但是我不知道如何正确初始化条目。这是我的相关代码:

# Necessary Modules.------------------------------------------------------------
import win32com.client as win32
import re
from tkinter import *
from tkinter.filedialog import askopenfilename
import tkinter.messagebox


# Class for selecting the file.-------------------------------------------------
class FilenameClass():
    def __init__(self):
        self.location = 'User Import.txt'

    def getFile(self, identity):
        self.file_opt = options = {}
        options['defaultextension'] = '.txt'
        options['filetypes'] = [('Text Document (.txt)', '.txt'),
                                ('all files', '.*')]
        self.filename = askopenfilename(**self.file_opt)
        if self.filename:
            if 'User Import' in identity:
                self.location = self.filename
                app.get_txt_File['bg'] = '#0d0'
                user_file = open(self.filename, 'r')
                user_total = user_file.read()
                remove_lines = user_total.splitlines()
                for user in remove_lines:
                    regex_tab = re.compile('\t')
                    user_info = regex_tab.split(user)
                    app.users.append(user_info)
            else:
                app.loadButton['bg'] = '#e10'


# Main Class.-------------------------------------------------------------------
class Application(Frame, Tk):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.users = []
        self.fileOBJtxt = FilenameClass()
        self.createWidgets()

    def createWidgets(self):

        # Define the default values for the options for the buttons
        # Grid layout options
        self.rowconfigure(0, minsize=5)
        self.width = 54
        self.grid(padx=5)
        self.loadButton_gopt = {'row':1,'column':1,'padx': 2, 'pady': 5}
        self.loadButton_wopt = {'width': round(self.width),'bg':'#e10'}
        self.loadButton()
        self.trainingCheckBox()
        self.signatureInput()

    def loadButton(self):
        '''Button that calls the filename class which allows the user to select
        the text file they wish to use.'''

        self.get_txt_File = Button(self, text="Load User List", \
        command=lambda: self.fileOBJtxt.getFile('User Import'))
        for key, value in self.loadButton_wopt.items():
            self.get_txt_File[key] = value
        self.get_txt_File.grid(**self.loadButton_gopt)

    def trainingCheckBox(self):

        self.training_var = IntVar()
        self.training = Checkbutton(text="Include training video?", \
        variable=self.training_var).grid(row=2, sticky=W)

    def signatureInput(self):

        Label(text="Signature Name").grid(row=4, sticky=W)
        entry = Entry(bg='#fff', width=50)
        entry.grid(row=4, column=1, columnspan=4)     

# Initialization parameters.----------------------------------------------------
if __name__ == '__main__':
    app = Application()
    app.master.title('User Notification Tool')
    app.master.geometry('405x550+100+100')
    app.master.resizable(width=False, height=False)
    app.mainloop()

我没有看到任何回溯,但我似乎无法显示我的输入框。我做错了什么?

编辑:添加了整个代码。

改变

entry = Entry(bg='#fff', width=50)

entry = tk.Entry(bg='#fff', width=50)

您输入字段的问题是您没有告诉它 frame/window 放在什么地方。

变化:

entry = Entry(bg='#fff', width=50)

收件人:

entry = Entry(self, bg='#fff', width=50)

确保您始终提供 window/frame 将要放置小部件的第一个参数。在这种情况下,它是 self 因为 self 指的是一个框架。

请记住,您的程序将无法 get() 输入字段中的字符串,因为您尚未将其定义为 class 属性。所以很可能你需要改变

这个:

entry = Entry(bg='#fff', width=50)
entry.grid(row=4, column=1, columnspan=4)    

为此:

self.entry = Entry(self, bg='#fff', width=50)
self.entry.grid(row=4, column=1, columnspan=4)     

此更改是必要的,以便您的应用程序的其余部分能够读取或写入条目小部件。