想要使用单选按钮更改列表元素
want to change list elements using radiobutton
我有一个列表 (elenco),我想在单击单选按钮时更改它的元素,但我总是获得相同的列表
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()
编辑:我post这里是所有新代码。我正在重写所有程序,因为我在使用旧代码时遇到了一些问题。
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()
此代码中没有按钮,但如果您 运行 程序,您会看到白色 canvas,它们会在那里。还将有一个 EntryBox,您可以在其中写入元素 (-s) 名称(或部分名称),您将获得与该名称相对应的按钮。但是如果你想通过一个列表切换到另一个?那么,如果我想要第二个列表中而不是第一个列表中的 element4 的按钮?看起来没用,但实际上主列表中会有 720 个元素,所有其他列表都将是该列表的一部分。列表与区域相对应,主列表是所有区域的列表。所以,如果我想要一些以字母 "a" 开头的元素,但我想要它来自特定列表(区域)而不是来自任何地方?
如果您有更好的想法,请通过单选按钮选择列表,我会使用它。我的问题是按列表移动到另一个列表
希望对您有所帮助:
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
),并将 lambda 函数更改为普通函数 (changeList
),并在该函数中使用了一个条件 (if-else
)根据变量值(0
或 1
),在每次单击单选按钮时打印一个列表。我还将 buttonvar
设置为 ' '
,因此当您启动程序时,单选按钮的 none 将被选中。除此之外我只更改了一些我不知道的变量,我只是觉得我的新变量会更好看(笑!)。
这就是你想要得到的吗:
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()
?
P.S.: 我的这个答案是基于@vladi 的编辑和评论:"For exemple: the list is empty, I click on button1, the list becomes [1,2,3], then I click on button 3 and I obtain [7,8,9]"
我有一个列表 (elenco),我想在单击单选按钮时更改它的元素,但我总是获得相同的列表
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()
编辑:我post这里是所有新代码。我正在重写所有程序,因为我在使用旧代码时遇到了一些问题。
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()
此代码中没有按钮,但如果您 运行 程序,您会看到白色 canvas,它们会在那里。还将有一个 EntryBox,您可以在其中写入元素 (-s) 名称(或部分名称),您将获得与该名称相对应的按钮。但是如果你想通过一个列表切换到另一个?那么,如果我想要第二个列表中而不是第一个列表中的 element4 的按钮?看起来没用,但实际上主列表中会有 720 个元素,所有其他列表都将是该列表的一部分。列表与区域相对应,主列表是所有区域的列表。所以,如果我想要一些以字母 "a" 开头的元素,但我想要它来自特定列表(区域)而不是来自任何地方?
如果您有更好的想法,请通过单选按钮选择列表,我会使用它。我的问题是按列表移动到另一个列表
希望对您有所帮助:
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
),并将 lambda 函数更改为普通函数 (changeList
),并在该函数中使用了一个条件 (if-else
)根据变量值(0
或 1
),在每次单击单选按钮时打印一个列表。我还将 buttonvar
设置为 ' '
,因此当您启动程序时,单选按钮的 none 将被选中。除此之外我只更改了一些我不知道的变量,我只是觉得我的新变量会更好看(笑!)。
这就是你想要得到的吗:
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()
?
P.S.: 我的这个答案是基于@vladi 的编辑和评论:"For exemple: the list is empty, I click on button1, the list becomes [1,2,3], then I click on button 3 and I obtain [7,8,9]"