我遇到了一个将按钮对象放入列表的问题。
我不确定我所要达到的目标是否真的能实现,但这就是。。在
工作样品:
from tkinter import *
class Main(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)
self.pack(fill = 'both', expand = True)
# General purpose variables ----------
self.isButtonSelected = False
self.isButton_A_Selected = False # controll boolean
self.isButton_B_Selected = False
self.isButton_C_Selected = False
self.isButton_D_Selected = False
# Layers ----------
self.background = Frame(self)
# Buttons ----------
self.button_A = Button(self.background, text = "A", bg = 'white', command = self.selectButton_A)
self.button_B = Button(self.background, text = "B", bg = 'white', command = self.selectButton_B)
self.button_C = Button(self.background, text = "C", bg = 'white', command = self.selectButton_C)
self.button_D = Button(self.background, text = "D", bg = 'white', command = self.selectButton_D)
# Packs ----------
#layers
self.background.pack(fill = 'both', expand = True)
#buttons
btnPackPrefix = {'side' : 'left', 'fill' : 'both', 'expand' : 'True'}
self.button_A.pack(btnPackPrefix)
self.button_B.pack(btnPackPrefix)
self.button_C.pack(btnPackPrefix)
self.button_D.pack(btnPackPrefix)
def selectButton_A(self):
'''The idea here is similar to radiobuttons.
Click to select. Click same to deselect.
Click other to deselect old and select new.
Only one button can be selected at a time.
-repeated for all similar methods.'''
if self.isButtonSelected == False: # click-select
self.button_A.config(bg = 'green')
self.isButtonSelected = True
self.isButton_A_Selected = True
else:
if self.isButton_A_Selected: # click-deselect
self.resetButtons()
self.isButtonSelected = False
else: # deselect other and select this
self.resetButtons()
self.button_A.config(bg = 'green')
self.isButtonSelected = True
self.isButton_A_Selected = True
def selectButton_B(self):
if self.isButtonSelected == False:
self.button_B.config(bg = 'green')
self.isButtonSelected = True
self.isButton_B_Selected = True
else:
if self.isButton_B_Selected:
self.resetButtons()
self.isButtonSelected = False
else:
self.resetButtons()
self.button_B.config(bg = 'green')
self.isButtonSelected = True
self.isButton_B_Selected = True
def selectButton_C(self):
if self.isButtonSelected == False:
self.button_C.config(bg = 'green')
self.isButtonSelected = True
self.isButton_C_Selected = True
else:
if self.isButton_C_Selected:
self.resetButtons()
self.isButtonSelected = False
else:
self.resetButtons()
self.button_C.config(bg = 'green')
self.isButtonSelected = True
self.isButton_C_Selected = True
def selectButton_D(self):
if self.isButtonSelected == False:
self.button_D.config(bg = 'green')
self.isButtonSelected = True
self.isButton_D_Selected = True
else:
if self.isButton_D_Selected:
self.resetButtons()
self.isButtonSelected = False
else:
self.resetButtons()
self.button_D.config(bg = 'green')
self.isButtonSelected = True
self.isButton_D_Selected = True
def resetButtons(self):
'''this pretty much resets all buttons and controll booleans
to their default state'''
#A
self.button_A.config(bg = 'white') # paint button white
self.isButton_A_Selected = False # controll boolean reset
#B
self.button_B.config(bg = 'white')
self.isButton_B_Selected = False
#C
self.button_C.config(bg = 'white')
self.isButton_C_Selected = False
#D
self.button_D.config(bg = 'white')
self.isButton_D_Selected = False
def run_Application():
app = Main()
app.master.geometry('200x50')
app.mainloop()
run_Application()
正如您所注意到的,我的代码中有许多复制粘贴的片段,每个片段的详细信息都有所更改。
所以我得把它弄短一点。。我需要一个控制所有这些动作的功能
因为它们是相似的。在
我想到了这个。在
非工作样品:
^{pr2}$我尝试用包含Int属性和
它工作得很好!在
从错误报告中,我知道列出按钮不是一个好主意,如果不是不可能的话。在
我在谷歌上搜索了很多例子或类似的问题,但我没有
有什么好结果吗。在
我还搜索了Python和
弄糊涂了。我想看看是否可以保存一个指向
的变量
但是我认为结果是一样的。。列表将其对象读取为按钮和
引发错误。在
所以,我的问题是:
1有什么办法吗?(显著缩短第一个代码示例。)
2关于列出按钮或窗口小部件:如果可以,怎么做?如果没有,为什么?
三。在第二个代码示例中,我需要按钮命令来包含“i”参数
我的职能部门需要的。这是怎么打出来的?似乎仅仅增加(i)是行不通的。在
提前谢谢!在
看看这行代码:
发生什么事了?
self.selectButton(0)
做什么?您正在调用函数self.selectButton(0)
,然后使用该函数的结果作为command
属性的值。这几乎肯定不是你想要的。在你需要做的是这样的:
^{pr2}$这将推迟对
self.selectButton
的调用,直到实际单击该按钮。这将允许创建按钮,如果需要,可以将其分配到列表:相关问题 更多 >
编程相关推荐