0

所以我正在尝试构建一个侮辱生成器,它将获取列表,随机化输入,并在按下按钮时显示随机代码。

现在,代码看起来像......

import Tkinter
import random


section1 = ["list of stuff"]
section2 = ["list of stuff"]
section3 = ["list of stuff"]

class myapp(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self, parent)
        self.parent = parent
        self.initialize()

    def initialize(self):
        self.grid() # creates grid layout manager where we can place our widgets within the window

        button = Tkinter.Button(self, text=u"Generate!", command=self.OnButtonClick)
        button.grid(column=1, row=0)

        self.labelVariable = Tkinter.StringVar()

        label = Tkinter.Label(self, textvariable=self.labelVariable, anchor='w', fg='white', bg='green')
        label.grid(column=0, row=1, columnspan=2, sticky='EW')
        self.labelVariable.set(u"Oh hi there !")

        self.grid_columnconfigure(0, weight=1)
        self.resizable(True, False)
        self.update()
        self.geometry(self.geometry())

    def generator():
        a = random.randint(0, int(len(section1))-1)
        b = random.randint(0, int(len(section2))-1)
        c = random.randint(0, int(len(section3))-1)
        myText = "You are a "+ section1[a]+" "+section2[b]+'-'+section3[c]+"! Fucker."
        return myText

    def OnButtonClick(self):
        self.labelVariable.set(myText + "(You clicked the button !)") 
        self.entry.focus_set()
        self.entry.selection_range(0, Tkinter.END)


if __name__=='__main__':
    app = myapp(None) # Instantiates the class
    app.title('Random Insult Generator') # Names the window we're creating.
    app.mainloop() # Program will loop indefinitely, awaiting input

现在,它给出的错误myText是未定义。关于如何解决它的任何想法?

编辑: 错误消息是...

Exception in Tkinter callback
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1470, in __call__
    return self.func(*args)
  File "...", line 41, in OnButtonClick
    self.labelVariable.set(myText+"(You clicked the button !)")
NameError: global name 'myText' is not defined
4

3 回答 3

2

如果我正确剖析你的代码,你需要设置 def generator(): 在你定义的类之外;aka,让它成为一个本地函数,而不是 myapp 的一个方法。其次,您尝试在 onButtonClick 方法中使用 myText 变量,但正如您的错误所述,它没有定义。为了使用您的生成器函数发送的数据,您需要调用该函数。只需将 def 生成器的最后一行视为占位符即可。

您的访问器方法应如下所示:

def OnButtonClick(self):
    self.labelVariable.set(generator()+"(You clicked the button !)") 
    #self.entry.focus_set()
    #self.entry.selection_range(0,Tkinter.END)

(不需要入口小部件,您还没有调用 .pack() ;))

并且您的生成器函数应该在您的课程之外。

或者,您可以将生成器函数作为方法留在类中,但您需要添加 self. 争论作为它的参数:

def generator(self):

并在按钮单击事件方法中调用它时添加 self.generator() 。

干杯!

于 2013-09-11T04:50:56.903 回答
0
def OnButtonClick(self):
    myText = self.generator() # CALL IT!
    self.labelVariable.set(myText+"(You clicked the button !)") 
    self.entry.focus_set()
    self.entry.selection_range(0,Tkinter.END)

def generator(self):....
于 2013-09-11T04:48:21.297 回答
-2

使用 OnButtonClick 函数的第二行进行更改,并将 myText 替换为 generator()

于 2013-09-11T04:50:15.570 回答