Python 我可以访问未分配给变量的按钮信息吗?
这是我在这里的第一篇文章。我正在尝试创建一个带有随机数的5x5表。目标是,用户应该从表中的最小数字到最大数字进行单击,一旦他单击了正确的数字,应该将其禁用。我不想将每个按钮都附加到变量。我已经创建了带有随机数的窗口,但现在我想创建一个函数来检查单击的数字是否最小,如果答案是“是”,我必须将其状态更改为“禁用”。我已经在上面坐了4个多小时了,我不知道如何访问点击按钮信息,比如“文本”,以及如何在用户点击后禁用它 这是我到目前为止得到的,关于dat函数的工作Python 我可以访问未分配给变量的按钮信息吗?,python,tkinter,Python,Tkinter,这是我在这里的第一篇文章。我正在尝试创建一个带有随机数的5x5表。目标是,用户应该从表中的最小数字到最大数字进行单击,一旦他单击了正确的数字,应该将其禁用。我不想将每个按钮都附加到变量。我已经创建了带有随机数的窗口,但现在我想创建一个函数来检查单击的数字是否最小,如果答案是“是”,我必须将其状态更改为“禁用”。我已经在上面坐了4个多小时了,我不知道如何访问点击按钮信息,比如“文本”,以及如何在用户点击后禁用它 这是我到目前为止得到的,关于dat函数的工作 from tkinter import
from tkinter import *
import random
def click(z=None):
global o
Button(state=DISABLED)
o=Tk()
y=0
listrow=[4,3,2,1,0]
numbers=[]
spr=IntVar()
while len(numbers) < 25:
r = random.randint(0,999)
if r not in numbers:
numbers.append(r)
for i in range(1,26):
Button(o, text=str(numbers[i-1]), width=10).grid(row=listrow[i%5], column=y)
if i == 5:
y+=1
elif i == 10:
y+=1
elif i==15:
y+=1
elif i==20:
y+=1
else:
continue
o.bind_all('<Button-1>', click)
o.mainloop()
从tkinter导入*
随机输入
def单击(z=无):
全球o
按钮(状态=禁用)
o=Tk()
y=0
listrow=[4,3,2,1,0]
数字=[]
spr=IntVar()
而len(数字)<25:
r=random.randint(0999)
如果r不是数字:
数字。追加(r)
对于范围(1,26)内的i:
按钮(o,文本=str(数字[i-1]),宽度=10)。网格(行=listrow[i%5],列=y)
如果i==5:
y+=1
elif i==10:
y+=1
elif i==15:
y+=1
elif i==20:
y+=1
其他:
持续
o、 全部绑定(“”,单击)
o、 mainloop()
考虑将类对象与已定义的模块集成,以用于生成控件和按钮单击事件。具体来说,在每个按钮上单击检查数字列表的最小值,并通过将索引整数作为参数传递来禁用相应的按钮项。请参阅下面的调整
在按钮命令调用中,聪明的lambda i=i归功于@BrenBarn:
from tkinter import *
import random
class NUMapp():
def __init__(self):
self.root = Tk()
self.buildControls()
self.root.mainloop()
def buildControls(self):
self.root.wm_title("Random Number Picker")
x = 0; y = 0
self.numbers = []; self.numbtn = []
while len(self.numbers) < 25:
r = random.randint(0,999)
if r not in self.numbers:
self.numbers.append(r)
for i in range(1,26):
self.numbtn.append(Button(self.root, text=str(self.numbers[i-1]), width=10,
command=lambda i=i:self.btnclick(i-1)))
self.numbtn[i-1].grid(row=x, column=y)
x+=1
if i % 5 == 0:
x = 0
y += 1
def btnclick(self, mynum):
currnum = int(self.numbtn[mynum].cget('text')) # CAPTURE BUTTON TEXT
if currnum == min(self.numbers):
self.numbtn[mynum].config(state="disabled") # DISABLE BUTTON
self.numbers.remove(currnum) # REMOVE FOR NEW MINIMUM
NUMapp()
从tkinter导入*
随机输入
类NUMapp():
定义初始化(自):
self.root=Tk()
self.buildControls()
self.root.mainloop()
def构建控制(自身):
self.root.wm_标题(“随机数选择器”)
x=0;y=0
self.number=[];self.numbtn=[]
而len(自身编号)<25:
r=random.randint(0999)
如果r不在自身编号中:
self.number.append(r)
对于范围(1,26)内的i:
self.numbtn.append(按钮(self.root,text=str(self.number[i-1]),宽度=10,
command=lambda i=i:self.btnclick(i-1)))
self.numbtn[i-1]。网格(行=x,列=y)
x+=1
如果i%5==0:
x=0
y+=1
def btnclick(self,mynum):
currnum=int(self.numbtn[mynum].cget('text'))#捕获按钮文本
如果currnum==min(自编号):
self.numbtn[mynum].config(state=“disabled”)#禁用按钮
self.number.remove(currnum)#删除以获得新的最小值
NUMapp()
4种方法,要么像您应该做的那样为按钮分配一个变量,要么使用您创建的IntVar。或者将所有按钮保存到列表中,或者创建一个子类按钮并添加您自己的方法。每个按钮都有一个“文本”值。我可以在函数中键入什么,所以一旦用户单击该按钮,我就可以使用该“文本”值?如果按钮未附加到变量,cget似乎不起作用。只有知道按下了哪个按钮,才可以使用text属性,而现在不知道