from Tkinter import *
import random
def Factorer(a,b,c):
while True:
random_a1=random.randint(-10,10)
random_a2=random.randint(-10,10)
random_c1=random.randint(-10,10)
random_c2=random.randint(-10,10)
if random_a1==0 or random_a2 == 0 or random_c1 == 0 or random_c2 == 0:
pass
elif (random_a1*random_c2) + (random_a2*random_c1) == b and random_a1/random_c1 != random_a2/random_c2 and random_a1*random_a2==a and random_c1*random_c2==c:
break
print "y=(%dx+(%d))(%dx+(%d))" % (random_a1,random_c1,random_a2,random_c2)
root = Tk()
buttonSim1 = Button(root, text="Convert", command=lambda: Factorer(enterA.get(),enterB.get(),enterC.get()))
buttonSim1.grid(row=2, column=3)
enterA = Entry(root)
enterA.grid(row=1, column=1)
enterB = Entry(root)
enterB.grid(row=1, column=2)
enterC = Entry(root)
enterC.grid(row=1, column=3)
root.mainloop()
我如何才能运行此代码,每次单击按钮它都会崩溃。 但是,如果我删除.get()并插入数字,它就可以工作。 提前致谢
答案 0 :(得分:2)
您要将字符串与整数进行比较,您需要将a,b
和c
投射到int:
Tkinter.Button(root, text="Convert", command=lambda: Factorer(int(enterA.get()),int(enterB.get()),int(enterC.get())))
答案 1 :(得分:1)
问题的根源在于你将字符串与整数进行比较,因此你的无限循环永远不会完成。这就是为什么程序会动手并且必须强制退出。
最好的解决方案是让按钮调用一个函数来获取数据,将其格式化为正确的值,然后调用函数来完成工作。试图将所有内容压缩到lambda
中,这使得程序难以调试。
例如:
def on_button_click():
a = int(enterA.get())
b = int(enterB.get())
c = int(enterC.get())
result = Factorer(a,b,c)
print(result)
Tkinter.Button(..., command=on_button_click)
通过使用单独的函数,它为您提供了添加打印语句或pdb断点的机会,以便您可以在数据运行时检查它们。它还可以更轻松地添加try / catch块来处理用户没有输入有效数字的情况。