Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以访问未分配给变量的按钮信息吗?_Python_Tkinter - Fatal编程技术网

Python 我可以访问未分配给变量的按钮信息吗?

Python 我可以访问未分配给变量的按钮信息吗?,python,tkinter,Python,Tkinter,这是我在这里的第一篇文章。我正在尝试创建一个带有随机数的5x5表。目标是,用户应该从表中的最小数字到最大数字进行单击,一旦他单击了正确的数字,应该将其禁用。我不想将每个按钮都附加到变量。我已经创建了带有随机数的窗口,但现在我想创建一个函数来检查单击的数字是否最小,如果答案是“是”,我必须将其状态更改为“禁用”。我已经在上面坐了4个多小时了,我不知道如何访问点击按钮信息,比如“文本”,以及如何在用户点击后禁用它 这是我到目前为止得到的,关于dat函数的工作 from tkinter import

这是我在这里的第一篇文章。我正在尝试创建一个带有随机数的5x5表。目标是,用户应该从表中的最小数字到最大数字进行单击,一旦他单击了正确的数字,应该将其禁用。我不想将每个按钮都附加到变量。我已经创建了带有随机数的窗口,但现在我想创建一个函数来检查单击的数字是否最小,如果答案是“是”,我必须将其状态更改为“禁用”。我已经在上面坐了4个多小时了,我不知道如何访问点击按钮信息,比如“文本”,以及如何在用户点击后禁用它

这是我到目前为止得到的,关于dat函数的工作

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属性,而现在不知道