无法使用tkinter创建Entry小部件

时间:2017-10-16 20:42:52

标签: python python-3.x tkinter tk

我在使用tkinter创建条目小部件时遇到了一些麻烦。我已经导入了必要的模块,并且已经创建了几个按钮和复选框。但是我无法弄清楚如何正确初始化Entry。这是我的相关代码:

# 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框显示出来。我做错了什么?

编辑:添加了整个代码。

2 个答案:

答案 0 :(得分:2)

输入字段的问题是您没有告诉它要放入哪个框架/窗口。

变化:

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

要:

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

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

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

此:

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

To This:

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

为了让您的应用程序的其余部分能够读取或写入条目小部件,必须进行此更改。

答案 1 :(得分:-1)

更改

@app.route('/employeesName', methods=['GET')
def employeesName():
    if request.method == 'GET':
        return render_template('getEmployees.html', results=getEmployees())

(function() {

    function Users() {}
    Users.prototype.getUser = function() {
      $.getJSON('/usersList/users.json', function(request) {
        Users.prototype.allUsers = request.users;
      });
    }

    var users = new Users();
    users.getUsers();

    console.log(users.allUsers);
  }
  ())