Создать простую функцию для диалогового окна со списком в tkinter - PullRequest
0 голосов
/ 07 июня 2019

У меня есть программа на Python3 с tkinter, и в некоторой части кода я хочу «спросить» из списка опций.Я вижу, что ни simplebox, ни messagebox не имеют этой опции, только для текста. Как я могу сделать это для вызова типа result = simplechoicebox("title","Text",["Choices"],parent) и возврата результата?

Я пытался сделать это с помощью функций tkinter, но я не сделалне могу найти ..

from tkinter import *
from tkinter import Menu, messagebox,simpledialog,ttk

def c_funcbutton():
    res = simpledialog.askstring('Ask','Title',parent=main_window)
    return res #Or do anything..


main_window = Tk()
main_window.title("My Window")

menu = Menu(main_window)
menu_com = Menu(menu)
menu_com = Menu(menu, tearoff=0)
menu_com.add_command(label='Here',command=c_funcbutton)
menu_com.add_command(label='Another')
menu.add_cascade(label='Equipos', menu=menu_com)

main_window.config(menu=menu)

main_window.mainloop()

Я ожидаю, что смогу спросить о Choicebox / Combobox в c_funcbutton() и вернуть его

1 Ответ

0 голосов
/ 10 июня 2019

Если вы хотите использовать что-то вроде result = simplechoicebox("title","Text",["Choices"],parent), вы можете просто создать для него свой собственный класс.

class SimpleChoiceBox:
    def __init__(self,title,text,choices):
        self.t = Toplevel()
        self.t.title(title if title else "")
        self.selection = None
        Label(self.t, text=text if text else "").grid(row=0, column=0)
        self.c = ttk.Combobox(self.t, value=choices if choices else [], state="readonly")
        self.c.grid(row=0, column=1)
        self.c.bind("<<ComboboxSelected>>", self.combobox_select)

    def combobox_select(self,event):
        self.selection = self.c.get()
        self.t.destroy()

Теперь вы можете определить свой c_funcbutton, как показано ниже:

def c_funcbutton():
    global res
    res = SimpleChoiceBox("Ask","What is your favourite fruit?",["Apple","Orange","Watermelon"])

Однако это значение не вернется - обычный класс работает иначе, чем simpledialog.Но вы можете получить доступ к выбору напрямую с помощью res.selection, как показано ниже:

menu_com.add_command(label='Another',command=lambda: print (res.selection))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...