想要使用radiobutton更改列表元素

时间:2016-07-19 16:33:58

标签: list tkinter radio-button python-3.3

我有一个列表(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选择列表,我会使用它。我的问题是按列表移动到另一个

2 个答案:

答案 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点击的列表取决于变量值(01)。我还将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]"