Python tkinter跨脚本函数调用问题:按钮点击无响应
嘿,我来帮你搞定这个Tkinter按钮的问题!你的核心问题出在按钮的command参数设置上,另外还有循环导入的坑需要避开,咱们一步步来:
为什么程序启动就打印"Now successful",点击按钮没反应?
你在定义按钮的时候写了command=self.printThis()——这里的括号会让Python在初始化按钮立刻执行这个方法,而不是把方法绑定给按钮等待点击触发。正确的写法是去掉括号,直接传方法对象:
self.startButton = ttk.Button(runTestLabelFrame, text="START", command=self.printThis)
场景1:调用Run_Test_Window类内的printThis方法
只需要修正上面的command参数即可,修改后的RunTestClass.py部分代码:
def __init__(self,tab1): runTestLabelFrame = ttk.LabelFrame(text ="Run Test", padding =10) runTestLabelFrame.grid(in_ = tab1, padx = 20, pady = 20) # 去掉printThis后面的括号 self.startButton = ttk.Button(runTestLabelFrame, text="START", command=self.printThis) self.startButton.grid(row=5, column=1, padx = 10)
场景2:调用main.py里的printThis函数
直接在RunTestClass.py里import main会触发循环导入(main导入RunTestClass,RunTestClass又导入main),导致报错。咱们可以把main里的printThis函数作为参数传给Run_Test_Window的实例,具体操作如下:
- 修改
main.py,实例化Run_Test_Window时传入printThis:
window1 = RT.Run_Test_Window(tab1, external_print=printThis)
- 修改
RunTestClass.py的构造函数,接收外部函数并绑定给按钮:
class Run_Test_Window: def printThis(self): print('Now successful!') # 新增external_print参数,默认值为None def __init__(self,tab1, external_print=None): runTestLabelFrame = ttk.LabelFrame(text ="Run Test", padding =10) runTestLabelFrame.grid(in_ = tab1, padx = 20, pady = 20) # 如果传入了外部函数,就用它;否则用类内的方法 if external_print: self.startButton = ttk.Button(runTestLabelFrame, text="START", command=external_print) else: self.startButton = ttk.Button(runTestLabelFrame, text="START", command=self.printThis) self.startButton.grid(row=5, column=1, padx = 10)
这样修改后,点击按钮就会触发对应的函数啦,而且不会再出现启动时自动打印的问题~
内容的提问来源于stack exchange,提问作者user2423970
相关产品推荐
相关产品推荐

