Tkinter按钮窗口打开即自动执行,点击触发失效问题求助
问题分析与解决方案
你的代码里有两个核心问题:
- 创建按钮后直接调用了
save(),这行代码会在窗口初始化阶段立刻执行保存逻辑,而非等待按钮点击触发。 - 按钮的
command参数用lambda : save('Save')调用带参数的save,但你定义的save()函数并没有接收参数的逻辑,后续点击按钮会触发参数不匹配的错误。
修正后的代码
from tkinter import * from tkinter.filedialog import asksaveasfile def main(): root = Tk() root.geometry("777x575") root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=2) root.rowconfigure(0, weight=1) text = Text(root, width = 405 , height = 205) text.place(x=500, y=10, anchor=S) def save(): Files = [('All Files', '*.*'), ('Python Files', '*.py'), ('Text Document', '*.txt')] file = asksaveasfile(filetypes = Files, defaultextension = Files) # 无需lambda,直接将save函数赋值给command(因为不需要传参) button = Button(root, text = 'Save', command = save) button.place(anchor = CENTER, x = 400, y = 500) # 移除直接调用save()的语句,避免窗口初始化时自动执行 # save() root.mainloop() if __name__ == '__main__': main()
额外说明(若需传递参数)
如果确实需要给save函数传递参数,需先修改函数定义,再用lambda传递参数,示例如下:
def save(action): print(action) # 可以使用传递的参数做逻辑区分 Files = [('All Files', '*.*'), ('Python Files', '*.py'), ('Text Document', '*.txt')] file = asksaveasfile(filetypes = Files, defaultextension = Files) button = Button(root, text = 'Save', command = lambda : save('Save'))
修改后程序只会在点击按钮时触发保存对话框,窗口初始化时不会自动执行。
内容的提问来源于stack exchange,提问作者newstudent
相关产品推荐
相关产品推荐

