Найти - Пользователи
Полная версия: возвращение переменной
Начало » Python для новичков » возвращение переменной
1
wartes
Помогите пожалуйста, нужно вернуть переменную I из функции, пробовал через глобальную переменную, значение функции и как параметр вернуть, но похоже у меня где то ошибка с форматом значения….
 from tkinter import* 
root=Tk() 
sizex = 600 
sizey = 400 
posx = 40 
posy = 20 
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy)) 
itemsforlistbox=['one','two','three','four','five','six','seven'] 
def CurSelet(i):
    widget = i.widget 
    selection=widget.curselection()
    i=(selection[0])
    print(i)    
mylistbox=Listbox(root,width=60,height=10,font=('times',13)) 
mylistbox.bind('<<ListboxSelect>>',CurSelet) 
mylistbox.place(x=32,y=90) 
for items in itemsforlistbox: 
    mylistbox.insert(END,items) 
root.mainloop()
rami
Ваш вопрос не понятен, вы хотите получить не номер выбранного элемента в списке, а сам выбранный элемент ('one','two','three' и т.д.) ? Если да, то перепишите функцию CurSelet:
 def CurSelet(i):
    widget = i.widget
    selection=widget.selection_get()
    print(selection)
wartes
так значение же осталось в пределах функции, может быть я не корректно выразился, мне значение этой функции нужно будет перенести в другую, вот в приведенном примере я получаю номер, записываю его в переменную и хочу использовать этот номер в другой функции, проблема в том что переменная i существует только в пределах это функции, больше нигде я использовать ее не могу.
Прошу прощения что криво выражаюсь, у меня голова уже кругом ходит
rami
wartes
… вот в приведенном примере я получаю номер, записываю его в переменную и хочу использовать этот номер в другой функции …
Переменная mylistbox содержит в себе всё что связано со списком, в том числе что выделено в данный момент. Создавать специальную функцию для этого не нужно, из любой другой функции можно получить номер выделенной записи. В примере выбирайте запись в списке и жмите на кнопку:
 from tkinter import *
root=Tk()
sizex = 600
sizey = 400
posx = 40
posy = 20
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))
itemsforlistbox=['one','two','three','four','five','six','seven']
 
def CurSelet():
    selection = mylistbox.curselection()[0]
    print(f'выбрано: {selection}')
 
mylistbox=Listbox(root,width=60,height=10,font=('times',13))
mylistbox.place(x=32,y=90)
mylistbox.insert(0, *itemsforlistbox)
 
bt = Button(root, text='кнопка', command=CurSelet)
bt.place(x=32,y=20)
 
root.mainloop()
wartes
rami
Переменная mylistbox содержит в себе всё что связано со списком, в том числе что выделено в данный момент. Создавать специальную функцию для этого не нужно, из любой другой функции можно получить номер выделенной записи. В примере выбирайте запись в списке и жмите на кнопку:
А возможно как либо записать в переменную лишь выделенное?
В вашем примере тоже только вывод на экран, но неужели невозможно в дальнейшем коде использовать этот выбор? Мне нужно использовать в дальнейшем коде эту переменную…
В дальнейшем хочу что то типа“если в этом списке выбрано это, то делаем тото, а если выбрано другое, делаем другое”
rami
wartes
В вашем примере тоже только вывод на экран
Я вывожу на экран потому, что не знаю что ещё делать, вместо вывода на экран можно делать что угодно. Давайте пример (и описание словами), что нужно делать.
rami
wartes
В дальнейшем хочу что то типа“если в этом списке выбрано это, то делаем тото, а если выбрано другое, делаем другое”
Вот пример выбора действия:
 from tkinter import Tk, StringVar, Listbox, Label
 
itemsforlistbox=['Сделать первую клетку красной','Сделать вторую клетку красной',
                 'Сделать третью клетку красной','Сделать первую клетку синей',
                 'Сделать вторую клетку зелёной','Сделать третью клетку жёлтой',
                 'Закрыть окно']
 
def CurSelet(event):
    sel = mylistbox.curselection()[0]
    if sel == 0:
        lb1.config(bg='#f77')
    elif sel == 1:
        lb2.config(bg='#f77')
    elif sel == 2:
        lb3.config(bg='#f77')
    elif sel == 3:
        lb1.config(bg='#77f')
    elif sel == 4:
        lb2.config(bg='#7f7')
    elif sel == 5:
        lb3.config(bg='#ff7')
    elif sel == 6:
        root.destroy()
 
  
root=Tk()
root.geometry('600x400+400+20')
mylistbox=Listbox(root,width=30,height=10,font='Arial 16')
mylistbox.grid(column=0, row=0, rowspan=5)
mylistbox.insert(0, *itemsforlistbox)
mylistbox.bind('<<ListboxSelect>>', CurSelet)
 
asd1 = StringVar()
asd1.set('Первая клетка')
lb1 = Label(root, textvar=asd1)
lb1.grid(column=1, row=0)
 
asd2 = StringVar()
asd2.set('Вторая клетка')
lb2 = Label(root, textvar=asd2)
lb2.grid(column=1, row=1)
 
asd3 = StringVar()
asd3.set('Третья клетка')
lb3 = Label(root, textvar=asd3)
lb3.grid(column=1, row=2)
 
root.mainloop()


Вместо раскрашивания клеток можно выполнить любое другое действие.
Rafik
Если не ошибаюсь, то значение надо передать какой-либо функции после закрытия окна?
Если так, то
 from tkinter import*
root=Tk()
sizex = 600
sizey = 400
posx = 40
posy = 20
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))
itemsforlistbox=['one','two','three','four','five','six','seven']
var = IntVar() # Объявим переменную для возврата значения
def CurSelet(i):
    widget = i.widget
    selection=widget.curselection()
    i=(selection[0])
    var.set(i)  # Запишем в переменную значение выбранного
    # print(i)
    root.destroy() # Закроем список
mylistbox=Listbox(root,width=60,height=10,font=('times',13))
mylistbox.bind('<<ListboxSelect>>',CurSelet)
mylistbox.place(x=32,y=90)
for items in itemsforlistbox:
    mylistbox.insert(END,items)
root.mainloop()
# Передадим любой функции, например print-у, полученное значение
print(var.get())
wartes
rami
Вместо раскрашивания клеток можно выполнить любое другое действие.
Круто, сделал на основе вашего примера, добавил функцию в функцию. Спасибо за уделенное время и помощь
плюсую в карму
wartes
Rafik
Если не ошибаюсь, то значение надо передать какой-либо функции после закрытия окна?
Да! этот вариант изначально пробовал, у меня не получалось, спасибо, теперь буду уметь и это)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB