python - 在 Tkinter 中创建动态数量的函数并作为命令调用
问题描述
我在 python 中的 tkinter 中有两个单独的检查按钮列,具有相同的标签。
我的目标是在另一列中选择同一项目时禁用其中一列中的那些。
我可以在类和函数之外执行此操作,但在调用函数中的变量时遇到了麻烦。
当我为动态参数插入静态值并删除命令函数创建循环以禁用按钮时,它可以完美运行。然而,每当我使用循环时,我都会收到“AttributeError:'tool' 对象没有属性'dsblr0'”响应。
如何访问循环创建的函数,以便在第一列中检查相同项目时禁用第二列中的框?
任何帮助是极大的赞赏!
我当前的代码:
from tkinter import *
from tkinter import messagebox
buttonnames = []
class tool(Frame):
def get_button_names(self):
self.buttonnames=['b1','b2','b3','b4','b5']
global buttonnames
for item in self.buttonnames:
buttonnames.append(item)
def __init__(self, parent):
'''
Constructor
'''
Frame.__init__(self, parent)
self.parent=parent
self.get_button_names()
self.display_new_window()
for i in range(len(buttonnames)):
exec('''def dsblr{0}(self):
self.bcb{0}.config(state=DISABLED if self.var{0}.get() else NORMAL)'''.format(i,))
def display_new_window(self):
""" Transpose tools
"""
self.parent.title("Tool")
self.parent.grid_rowconfigure(0, weight=1)
self.parent.grid_columnconfigure(0, weight=1)
for i,column in enumerate(self.buttonnames):
exec('self.var{0}=IntVar()'.format(i,))
exec('self.bvar{0}=IntVar()'.format(i,))
exec('self.cb{0} = Checkbutton(self.parent, text=column, variable=self.var{0},command=self.dsblr{0})'.format(i,))
exec("self.cb{0}.grid(row=i+1,column=0,sticky='w')".format(i,))
exec('self.bcb{0} = Checkbutton(self.parent, text=column, variable=self.bvar{0})'.format(i,))
exec("self.bcb{0}.grid(row=i+1,column=1,sticky='w')".format(i,))
def main():
root=Tk()
d=tool(root)
root.mainloop()
if __name__=="__main__":
main()
解决方案
推荐阅读
- java - 如何在 MySQL 中导致死锁
- reactjs - 社交媒体登录后如何动态重定向到私有路由?
- javascript - Javascript createelement按钮不可点击
- c# - 不要使用 c# 运行指定的 Windows 应用程序
- android - 使用 Picasso 从 Firebase 检索图像
- r - R/dplyr:如何初始化一个空的数据框列表?
- flutter - 为什么灵活的小部件不能与颤振中的列小部件一起使用
- elasticsearch - 如何更新 ElasticSearch search_analyzer 映射而不会在分析器上发生冲突?
- javascript - React.js 功能组件中如何将子组件状态传递给父组件状态?
- javascript - Vue app.js 与主页上的其他 JavaScript 文件冲突(Laravel)