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(): を設定する必要があります。別名、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() を呼び出していません ;) )

ジェネレーター関数はクラスの外にある必要があります。

または、ジェネレーター関数をクラス内にメソッドとして残すこともできますが、自己を追加する必要があります。引数としての引数:

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 関数の 2 行目に変更し、myText を generator() に置き換えます。

于 2013-09-11T04:50:15.570 に答える