Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在函数中使用.get()。python_Python_Tkinter - Fatal编程技术网

如何在函数中使用.get()。python

如何在函数中使用.get()。python,python,tkinter,Python,Tkinter,我怎样才能让这段代码运行,每次我点击按钮,它就崩溃了。 但是,如果我删除.get()并只插入数字,它就会起作用。 提前感谢您正在将字符串与int进行比较,您需要将a、b和c转换为int: from Tkinter import * import random def Factorer(a,b,c): while True: random_a1=random.randint(-10,10) random_a2=random.randint(-10,10)

我怎样才能让这段代码运行,每次我点击按钮,它就崩溃了。 但是,如果我删除.get()并只插入数字,它就会起作用。
提前感谢

您正在将字符串与int进行比较,您需要将
a、b
c
转换为int:

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()

问题的根源在于,您正在将字符串与整数进行比较,因此您的无限while循环永远不会结束。这就是为什么该计划必须强制退出的原因

最好的解决方案是让您的按钮调用一个函数来获取数据,将其格式化为适当的值,然后调用该函数来完成工作。试图将所有这些压缩到
lambda
中会导致程序很难调试

例如:

Tkinter.Button(root, text="Convert", command=lambda: Factorer(int(enterA.get()),int(enterB.get()),int(enterC.get())))

通过使用单独的函数,您可以添加打印语句或pdb断点,以便在数据运行时检查数据。它还可以更轻松地添加try/catch块,以处理用户未输入有效数字的情况。

它“只是崩溃了”?没有输出?没有任何错误消息?没有输出错误,只是崩溃必须强制关闭,所以它不会崩溃而是挂起。你有一个while循环,也许它被卡住了?输入一些调试输出;似乎你的
get
给你的条件从来都不满足中断条件,而你的数字满足。你陷入了一个无限循环
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)