Tkinter -Python3 :将列表中的文字值转换为列表中的整数值 UPDATE

Tkinter -Python3 : turn a literal value in a list into a integral value in a list UPDATE

我曾经发布过一个非常模糊的问题,所以在一些研究和教程之后我决定更加精确。我查看了 Whosebug 中的示例,并将它们组合在一起,看看是否可以获得满意的结果。 (版权:代码不是我的!)

布局如下:

我允许此人输入一个数字,该数字也是将在程序中使用的规则的名称。

我有 1 行长方形,看起来像一块 8 列的板。单击时,每个矩形都会更改为另一种颜色。应该有一个按钮 "OK",一旦人们选择了规则并单击了一些矩形,它就应该被发送到代码。我希望颜色的变化等于列表中输入的值。所以换句话说,单击按钮 'OK' 时,列表中有 8 个值要输入到代码中。目前,我希望看到输入的列表张贴在canvas,在公告板下方。

我不知道如何将这些值添加到列表中,当我尝试命名这些值以便它可以轻松进入列表时我被阻止了,但它不起作用。在此先感谢您的任何建议,如果它仍然含糊不清,请告诉我,以便我可以尝试更清楚。 ^^'

这是我目前为止根据示例汇编的代码:

    from Tkinter import *

    [couleur_resulat = \[\]
    'black'==1
    'white'==0 

    class One_Rectangle (): 
        def __init__(self, can, depart_x, depart_y, size):
            self.can=can
            self.id= self.can.create_rectangle((depart_x, depart_y, depart_x+size,depart_y+size), fill='white')
            self.can.tag_bind(self.id, '<ButtonPress-1>', self.set_couleur) 

            self.couleur_change=True

        def set_couleur(self, event=None): 
            self.couleur_change = not self.couleur_change
            couleur='white' 
            if not self.couleur_change: 
                couleur='black'  

            self.can.itemconfigure(self.id, fill=couleur)


    fenetre =Tk()

    canvas= Canvas(fenetre,width=500, height=500, background='white')

    canvas.pack(side=BOTTOM, padx=5, pady=5) 

    OR0=One_Rectangle (canvas,110,20, 20)
    OR1=One_Rectangle (canvas,130,20, 20)
    OR2=One_Rectangle (canvas,150,20, 20)
    OR3=One_Rectangle (canvas,170,20, 20)
    OR4=One_Rectangle (canvas,190,20, 20)
    OR5=One_Rectangle (canvas,210,20, 20)
    OR6=One_Rectangle (canvas,230,20, 20)
    OR7=One_Rectangle (canvas,250,20, 20)
    OR8=One_Rectangle (canvas,270,20, 20)

    B1=Button(fenetre, text='Quitter', command=fenetre.quit).pack(side=RIGHT, padx=5, pady=5)
    B2=Button(fenetre, text='Relancer').pack(side=LEFT, padx=5, pady=5)   #Mettre une commande pour relancer le programme lorsque c'est termine 
    B3=Button(fenetre, text='OK').pack(side=RIGHT,padx=5, pady=5) #On doit mettre une commande qui recoit et envoie le numero au code GET? 

    text1= Label(fenetre, text= 'Regles (1-255):')     
    entr1= Entry(fenetre)
    text1.pack(side= LEFT)
    entr1.pack(side=RIGHT)  


    fenetre.mainloop()][1]

这是我收到的


更新:

我已经插入了建议的代码并进行了一些修改。我得到了一份颜色列表,但不是数字,也不是单个 list.For 示例: ['white']['black']['white']等 我应该怎么做才能让 black = 0 和 white= 1 并同时在一个列表中输入所有内容?我想收到这个 [0,0,1,0,0,1,0,1,0]

    from Tkinter import *

couleur_resultat = list(['white' for i in range(9)]) 


class One_Rectangle (): 
    def __init__(self, can, depart_x, depart_y, size,data, index):
        self.can=can
        self.id= self.can.create_rectangle((depart_x, depart_y, depart_x+size,depart_y+size), fill='white')
        self.can.tag_bind(self.id, '<ButtonPress-1>', self.set_couleur) 

        self._data= data                
        self._index = index = index     

        self.couleur_change=True

    def set_couleur(self, event=None): 
        self.couleur_change = not self.couleur_change
        couleur='white' 

        if not self.couleur_change: 
            couleur='black' 

        self._data[self._index] = couleur  

        self.can.itemconfigure(self.id, fill=couleur)



fenetre =Tk()

canvas= Canvas(fenetre,width=500, height=500, background='white')

canvas.pack(side=BOTTOM, padx=5, pady=5) 


OR0=One_Rectangle (canvas,110,20, 20, couleur_resultat, 0)
OR1=One_Rectangle (canvas,130,20, 20, couleur_resultat, 1)
OR2=One_Rectangle (canvas,150,20, 20, couleur_resultat, 2)
OR3=One_Rectangle (canvas,170,20, 20, couleur_resultat, 3)
OR4=One_Rectangle (canvas,190,20, 20, couleur_resultat, 4)
OR5=One_Rectangle (canvas,210,20, 20, couleur_resultat, 5)
OR6=One_Rectangle (canvas,230,20, 20, couleur_resultat, 6)
OR7=One_Rectangle (canvas,250,20, 20, couleur_resultat, 7)
OR8=One_Rectangle (canvas,270,20, 20, couleur_resultat, 8)



B1=Button(fenetre, text='Quitter', command=fenetre.quit).pack(side=RIGHT, padx=5, pady=5)

B3=Button(fenetre, text='OK', command= lambda: on_OK_pressed()).pack(side=RIGHT,padx=5, pady=5) 


def on_OK_pressed():  
    for couleur in couleur_resultat: 
        'black'==1
        'white'==0 

        print [couleur] 


fenetre.mainloop()

如果我理解你的问题,你正在寻找一种方法来存储颜色值,然后在下面显示它们(在 'OK' 单击时)。

from Tkinter import *

# Create a default for each item (what they start with)
couleur_resulat = ['white' for i in range(8)]
'black'==1
'white'==0 

class One_Rectangle (): 
    def __init__(self, can, depart_x, depart_y, size, data, index):
        self.can=can
        self.id= self.can.create_rectangle((depart_x, depart_y, depart_x+size,depart_y+size), fill='white')
        self.can.tag_bind(self.id, '<ButtonPress-1>', self.set_couleur) 

        # The same object for all items
        self._data = data
        self._index = index # The index it should be placed

        self.couleur_change=True

    def set_couleur(self, event=None): 
        self.couleur_change = not self.couleur_change
        couleur='white' 
        if not self.couleur_change: 
            couleur='black'

        # This will fill the same list across all objects
        self._data[self._index] = couleur

        self.can.itemconfigure(self.id, fill=couleur)


fenetre =Tk()

canvas= Canvas(fenetre,width=500, height=500, background='white')

canvas.pack(side=BOTTOM, padx=5, pady=5) 


OR0=One_Rectangle (canvas,110,20, 20, couleur_resulat, 0)
OR1=One_Rectangle (canvas,130,20, 20, couleur_resulat, 1)
# ... For reach rectangle                              ^ Make sure to increment


def on_OK_pressed(*args, **kwargs):
    for couleur in couleur_resulat:
        print(couleur) # Do whatever you would like with the data

这样,我们就可以让 python 处理列表管理。对于每个项目,我们必须确保有默认信息才能获得正确的索引。