簡體   English   中英

全局變量'getInfo'未定義

[英]Global Variable 'getInfo' is undefined

我正在為項目開發GUI,一旦將所有這些放到一個類中,它就會返回說

    Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__
    return self.func(*args)
  File "c:\users\ryan\documents\visual studio 2015\Projects\Group_3_Project\Group_3_Project\Group_3_Project.py", line 30, in <lambda>
    b1 = Button(root, text = 'Submit', command = (lambda e = ents: getInfo(e)))
NameError: global name 'getInfo' is not defined

到目前為止,這是我的代碼:

from tkinter import*


class GUI:
    fields = 'Last Name', 'First Name', 'Field', 'Phone Number', 'Office number'

    def getInfo(entries):
        for entry in entries:
            field = entry[0]
            text = entry[1].get()
            print('%s: "%s"' % (field, text))

    def makeForm(root, fields):
        entries = []
        for field in fields:
            row = Frame(root)
            lab = Label(row, width = 15, text = field, anchor = 'w')
            ent = Entry(row)
            row.pack(side = TOP, fill = X, padx = 5, pady = 5)
            lab.pack(side = LEFT)
            ent.pack(side = RIGHT, expand = YES, fill = X)
            entries.append((field, ent))
        return entries 

    if __name__ == '__main__':
        root = Tk()
        root.wm_title("HoursWizard")
        ents = makeForm(root, fields)
        root.bind('<Return>', (lambda event, e = ents: getInfo(e)))
        b1 = Button(root, text = 'Submit', command = (lambda e = ents: getInfo(e)))
        b2 = Button(root, text = 'Quit', command = root.quit)
        b1.pack(side = LEFT, padx = 5, pady = 5)
        b2.pack(side = LEFT, padx = 5, pady = 5)
        root.mainloop()

我不知道發生了什么,為什么它無法正常工作。 我敢肯定,這很容易解決,我只是缺少了一些東西。 任何幫助表示贊賞。 謝謝!

您應該查看官方的Python教程,並查看有關類的部分。 基本上,您的作用域和名稱空間不是您認為的那樣。 每個類方法(除非它被指定為靜態方法)都首先傳遞給實例本身,通常用self表示。 然后,您將使用self.myattribute引用實例屬性。 例如,在getInfo ,您所謂的entries根本不是條目,而是已創建的GUI類的實例。

我強烈建議您查閱有關如何制作OO Tkinter應用程序的一些教程。 它通常是這樣的:

class App:
    def __init__(self, parent):
        self.parent = parent
        self.parent.after(5000, self.other_method) # just a demo
        # create buttons, lay out geometry, etc.
    def other_method(self):
        self.do_print()
    def do_print(self):
        print('hello world')

root = Tk()
app = App(root)
root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM