Использование python 3.7.2 Я хочу получить выбранную запись из Listbox
.
Я играл с методами curselection()
, selection_set()
и get()
и переставил ихмного раз.Я также пытался установить self.libo(selectmode="single")
import tkinter as tk
class Gui(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack() # ipadx=3, ipady=3
self.createWidgets()
self.createBindings()
def widget_width(iterable):
"""returns a integer based on the longest entry contained in
'iterable'. 'iterable' should be a data structure like list, dict or
tuple."""
length_counter = 0
for entry in iterable:
if len(entry) > length_counter:
length_counter = len(entry)
return length_counter
def createWidgets(self):
# Listbox LabelFrame
self.libo_lafr = tk.LabelFrame(root)
self.libo_lafr.pack(side="top", padx=2, pady=2, ipadx=2, ipady=2)
# Listbox
self.libo_entries = ("one", "two", "three", "four", "five", "six", "seven")
self.libo = tk.Listbox(
self.libo_lafr, width=Gui.widget_width(self.libo_entries),
height=len(self.libo_entries), selectmode='browse',)
self.libo.insert("end", *self.libo_entries)
self.libo.pack()
self.libo.curselection()
print(self.libo)
self.libo_selected = self.libo.selection_set(0)
print(self.libo_selected)
self.libo_selection = (self.libo.get(0))
def createBindings(self):
self.libo.bind("<<ListboxSelect>>", print(self.libo_selection))
root = tk.Tk()
audio_output_switcher = Gui(root)
audio_output_switcher.mainloop()
Я просто хочу выбранную запись из Listbox
в виде строки.
В версии выше self.libo.curselection()
печатает ".!labelframe.!listbox"
(без "), я видел примеры кода, распаковывающие curselection()[0]
, и я также читал, что curselection()
должен возвращать список, но если я пытаюсь распаковать его, я получаю IndexError
.
self.libo.selection_set(0)
печатает "None"
(без ")
self.libo.get(0)
печатает" один "(без"), self.libo.get(6)
печатает "Seven"
. Так что get()
работает как положено и позволяет мнеиндексы доступа 0-6
из Listbox
записей.
Также примечательно, что я получаю только те печатные сообщения после закрытия графического интерфейса, я видел несколько видео на YouTube, где графический интерфейс tkinter будет выводиться на консольс открытым графическим интерфейсом в режиме реального времени.
Я подозреваю, что моя ошибка в функциях createWidgets()
и createBidings()
сделала двойной абзац перед строкой curselection()
.