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 处理列表管理。对于每个项目,我们必须确保有默认信息才能获得正确的索引。
我曾经发布过一个非常模糊的问题,所以在一些研究和教程之后我决定更加精确。我查看了 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 处理列表管理。对于每个项目,我们必须确保有默认信息才能获得正确的索引。