我有一个列表(elenco),当我点击radiobutton时我想改变它的元素,但我总是获得相同的列表
from tkinter import *
root = Tk()
el1 = [1, 2, 3, 4, 5]
el2 = [2, 2, 3, 4, 5]
elenco = []
def E(e):
elenco = e
return elenco
print (elenco)
radio1 = Radiobutton (text = 'r1', value = 1, command = lambda: E (el1)).pack()
radio2 = Radiobutton (text = 'r2', value = 2, command = lambda: E (el2)).pack()
print(elenco)
root.mainloop()
编辑:我在这里发布所有新代码。我正在重写所有程序,因为我对旧代码有一些问题。
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]
class mainWindow(Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.pack(expand=YES, fill=BOTH)
# Canvas on which buttons will be put:
mainCanvas = Canvas (self, height = 650, width = 900, scrollregion = (0, 0, 900, 6000), bg = 'white')
# Scrollbar to see all buttons (they could me also more then 60):
sbar = Scrollbar(self, command = mainCanvas.yview)
mainCanvas.config(yscrollcommand = sbar.set)
sbar.pack(side=LEFT, fill=Y)
mainCanvas.place(x = 0, y = 0)
#radiobuttons from which I'll choose the list
radio1 = Radiobutton(self, text = 'lis1', value = 1).place (x = 920, y = 150)
radio2 = Radiobutton(self, text = 'lis2', value = 2).place (x = 920, y = 170)
radio3 = Radiobutton(self, text = 'lis3', value = 3).place (x = 920, y = 190)
if __name__ == '__main__':
root = Tk()
root.title("main")
root.geometry("1130x650+100+10")
app = mainWindow(root)
root.mainloop()
在这段代码中没有按钮,但如果你运行程序,你会看到一个白色的画布,它们将在那里。还有一个EntryBox,您可以在其中编写元素(-s)名称(或其中的一部分),并且您将获得与该名称对应的按钮。但是如果你想按列表切换到另一个列表?所以,如果我想要第二个列表中的element4按钮而不是第一个列表中的按钮?它似乎毫无用处,但实际上主列表中将有720个元素,而所有其他列表将成为该元素的一部分。列表对应于区域,主列表是包含所有区域的列表。所以,如果我想要一些以字母“a”开头的元素,但我希望它来自特定的列表(区域)而不是来自任何地方?
如果你有更好的想法然后通过radiobutton选择列表,我会使用它。我的问题是按列表移动到另一个
答案 0 :(得分:1)
我希望这会有所帮助:
from tkinter import *
root = Tk()
list1 = [1,2,3]
list2 = [4,5,6]
buttonvar = IntVar()
buttonvar.set(' ')
def changeList():
if buttonvar.get() == 0:
print(list1)
else:
print(list2)
rb1 = Radiobutton(root, text='r1',
variable=buttonvar, value=0, command=changeList)
rb1.pack()
rb2 = Radiobutton(root, text='r2',
variable=buttonvar, value=1, command=changeList)
rb2.pack()
基本上,我使用变量(buttonvar
)作为radiobuttons,并将lambda函数更改为普通函数(changeList
)并在该函数内使用条件(if-else
)每个radiobutton点击的列表取决于变量值(0
或1
)。我还将buttonvar
设置为' '
,因此当您启动程序时,将不会选择任何单选按钮。除此之外,我只更改了一些我不知道的变量,我只是觉得我的新变量看起来更好(哈哈!)。
答案 1 :(得分:1)
这是你想要得到的:
from tkinter import *
root = Tk()
list1 = [1,2,3]
list2 = [4,5,6]
buttonvar = IntVar()
buttonvar.set(' ')
def changeList():
mainList = []
if buttonvar.get() == 0:
mainList = list1
print(mainList)
else:
mainList = list2
print(mainList)
rb1 = Radiobutton(root, text="List 1",
variable=buttonvar, value=0, command=changeList)
rb1.pack()
rb2 = Radiobutton(root, text="List 2",
variable=buttonvar, value=1, command=changeList)
rb2.pack()
?
PS:我的答案基于@ vladi的编辑和评论:"例如:列表为空,我点击button1,列表变为[1,2,3],然后我点击在按钮3上,我获得[7,8,9]"