2016-07-19 2 views
0

У меня есть список (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() 

EDIT: я выкладываю здесь весь новый код. Я переписываю всю программу, потому что у меня были проблемы со старым кодом.

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) (или его часть), и вам будут предоставлены кнопки, соответствующие этому имени. Но если вы хотите переключиться по списку на другой? поэтому, если я хочу кнопку для элемента 4, которая находится во втором списке, а не в первом? это кажется бесполезным, но на самом деле в главном списке будет 720 элементов, и все остальные списки будут частью этого. Списки соответствуют регионам, а основной список - один со всеми ними. Итак, если мне нужны элементы, начинающиеся с буквы «а», но я хочу ее из определенного списка (региона), а не извне?

Если у вас есть лучшие идеи, тогда выберите список с помощью радиобарабана, я буду использовать его. Моя проблема заключается в перемещении по списку в другой

+1

Ваша программа в целом беспорядочна. Функция и команды обратного вызова являются бессмысленными. Я написал это по-другому. Ждем ваших отзывов. –

+0

Я действительно не понимаю, что вы пытаетесь сказать. «Если вам не нравится писать по-английски, попросите друга подтвердить это для вас». -http: //stackoverflow.com/help/how-to-ask –

ответ

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: «Например: список пуст, я нажимаю на кнопку1, список становится [1,2,3], затем я нажимаю кнопку 3, а я получить [7,8,9] "

+0

Хорошо, Я попробую ... Надеюсь, это сработает ... Главный список изменится и из функции, или он останется таким, каким он был раньше? На данный момент спасибо ... Извините за все проблемы, которые я вам дал. Когда я проверю код, я скажу вам – vladi

+0

@ vladi. Рад помочь другим! Все еще с нетерпением жду услышать от вас. Пожалуйста, если какой-либо ответ решает вашу проблему, не забудьте принять его. –

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) для радиокнопок, и изменил лямбда-функции для нормальной функции (changeList) и использовал условие (if-else) внутри этой функции, которая печатает список на каждом щелчке радиообмена в зависимости от значений переменных (0 или 1). Я также установил buttonvar на ' ', поэтому при запуске программы не будут выбраны никакие радиокнопки. Кроме этого, я только изменил некоторые переменные, потому что не знаю, я просто подумал, что мои новые переменные будут выглядеть лучше (LOL!).

+0

этот ответ был бы лучше, если бы вы описали, что вы сделали по-другому. В противном случае читателю необходимо сравнить свой код по строкам с оригиналом, чтобы узнать, что другое. –

+0

@BryanOakley отредактировал. –

+0

@ ParvizKarimli Oh! Спасибо за ответ, но, возможно, я не объяснил, что я хотел. Когда программа запускается, мне нужно, чтобы у нее был уже выбран список (это был список elenco), но во время программы в любой момент у меня должна быть возможность изменить список и выбрать другой, щелкнув по кнопке ... Как вы думаете, мне нужно использовать «след»? Если да, то как? – vladi

Смежные вопросы