2017-12-20 8 views
-1

今日コードをコンパイルするときにこのエラーが発生しました。コードを実行すると、ボタンをクリックしたときに動作するはずの定義が表示されます。 目標は:置き換えPythonの定義がコードの起動時にロードされました

from tkinter import * 
from tkinter import messagebox 
import uuid 
from urllib.request import urlopen 
import io 
import base64 
def generate_pair(string_length=5): 
    """Generate 1 pair of serial""" 
    random = str(uuid.uuid4()) 
    random = random.upper() 
    random = random.replace("-","") 
    return random[0:string_length] 
def generate(length): 
    l1 = generate_pair(length) 
    l2 = generate_pair(length) 
    l3 = generate_pair(length) 
    l4 = generate_pair(length) 
    l5 = generate_pair(length) 
    final = l1+"-"+l2+"-"+l3+"-"+l4+"-"+l5+"-" 
    messagebox.showinfo("Generated serial key", "Generated serial key :"+final) 
image_url = "https://s14.postimg.org/eva19579t/button.png" 
image_byt = urlopen(image_url).read() 
image_b64 = base64.encodestring(image_byt) 
root = Tk() 
root.configure(background="white") 
root.minsize(350, 350) 
root.maxsize(350, 350) 
#Menu bar 
menubar = Menu(root) 
menubar.add_command(label="About") 
menubar.add_command(label="Contact!") 
root.config(menu=menubar) 
#End Menubar 
root.title("Serial Key Generator") 
f = Frame(root, bg='white') 
f.place(anchor="center", relx=.5, rely=.5) 
f.pack() 
l2 = Label(f, text="\n\n\n\n\n\n", background="white").pack() 
Label(f, text="Length of Serial Key", background='white').pack() 
v = IntVar() 
radiogroup = Frame(f) 
radiogroup.pack() 
R1 = Radiobutton(radiogroup, text="1", variable=v, value=1) 
R1.config(background='white') 
R1.pack(side="left") 
R2 = Radiobutton(radiogroup, text="2", variable=v, value=2) 
R2.config(background="white") 
R2.pack(side="left") 
R3 = Radiobutton(radiogroup, text="3", variable=v, value=3) 
R3.config(background="white") 
R3.pack(side="left") 
R4 = Radiobutton(radiogroup, text="4", variable=v, value=4) 
R4.config(background="white") 
R4.pack(side="left") 
R5 = Radiobutton(radiogroup, text="5", variable=v, value=5) 
R5.config(background="white") 
R5.pack(side="left") 
radiovalue = v.get() 
generate_b = Button(f) 
img = PhotoImage(data=image_b64) 
generate_b.config(image=img) 
generate_b.bind("<Button-1>", generate(radiovalue)) 
generate_b.pack() 
root.mainloop() 
+1

完全なエラーの詳細を引用してください。 –

+0

これはなんのエラーも起こらない –

答えて

3

generate_b.bind("<Button-1>", generate(radiovalue)) 

で:

generate_b.config(command=lambda arg=radiovalue: generate(radiovalue)) 

定義は、私はボタン をクリックしたとき、これは私のコードで起動するようになっています両方のオプション(bind(SEQUENCE, func)funcおよびtkinter.widget.config(command)commandは、実際の関数呼び出しとは対照的に、関数名にの参照が必要です。

あなたの関数は、コンピュータがその行に達するとすぐに実行されます。

generate_b.bind("<Button-1>", generate(radiovalue)) 

で:

generate_b.bind("<Button-1>", lambda arg=radiovalue: generate(radiovalue)) 

また、あなたはおそらく、というし、キーボードのものも含め、すべてのボタンの押下をキャッチするだけでなくそうするためには、ボタン自身commandオプションを使用することが代わる防止するために

generate_b.config(command= lambda arg=radiovalue : generate(radiovalue)) 

または:

+0

ありがとうございました! –

+1

どのようにうまくいっているのかはっきりしていますが、その理由がはるかによく説明されています... –

+1

@brunodesthuilliersもちろんです。私はさらに編集していた:) – Nae

関連する問題