访问绑定到事件(tkinter)的函数的返回值

2024-09-26 22:12:25 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我所做的就是将一个click事件绑定到一个函数上。例如:

self.button1.bind("<Button-1>",self.chooseDice)

我现在想要的是访问另一个函数中chooseDice()的结果。最好的办法是什么?在

^{pr2}$

Tags: 函数selfbind事件buttonclick办法pr2
3条回答

只需在类中添加一个self.result属性,并将其设置为chooseDice()

重构。把它分成两个函数。在

一个返回正确的结果,可供其他对象使用。在

另一个绑定到GUI控件,并使用适当的结果来激活和停用GUI对象。在

事实上,你应该一直这样做。你应该总是有一些函数可以做正常的Python工作,在没有GUI的情况下可以正常工作,并且可以在没有GUI的情况下进行单元测试。然后将这个工作的“模型”连接到GUI。在

你已经在做你该做的事了。示例代码将self.diceList设置为某个值。您可以在代码的任何其他地方直接使用self.diceList。在

顺便说一下,随着时间的推移,您编写的代码将很难维护。例如,如果你把骰子标签改为“骰子一”,或者干脆改为“一”,而不是“骰子1”?或者,随着你的应用程序的进展,你可能需要图形图像而不是按钮上的文本。您必须修改解析按钮名称的代码。实际上,您是在按钮标签中编码信息,这不是一个好主意。在

一个简单的解决方案是在回调中传递骰子数,这也使得chooseDice方法更简单、更容易理解。例如:

self.button1.configure(command=lambda btn=self.button1: self.chooseDice(btn, 1))

上面的代码将两个参数传递给chooseDice方法:button实例(因此您可以禁用它)和button number(这样您就不必解析按钮名称来获取它)

这也允许您在循环中创建骰子,而不是硬编码同一代码块的多个副本。下面是一个完整的工作示例:

^{pr2}$

最后,最后几点建议:

不要使用place,这会使您的gui更难创建,而且它们不会很好地响应窗口大小的变化、字体的更改、平台的更改等。请使用pack和{}。另外,不要创建固定宽度的按钮。同样,这是为了更好地处理字体的更改。有时您需要固定宽度的按钮,但您的代码似乎没有任何理由使用它们。在

最后,我不知道你到底想完成什么,但通常如果你用按钮来跟踪状态(这个东西是按还是不按?)您想要使用复选框(pick N of N N)或单选按钮(pick 1 of N)。你可能需要考虑切换到那些按钮,而不是按钮。在

相关问题 更多 >

    热门问题