#python #tkinter #tkinter-menu
#питон #tkinter #tkinter-меню
Вопрос:
Я пытаюсь создать приложение для отображения данных в режиме реального времени в исследовании электрических систем. Меню будет использоваться для открытия информации об истории каждого из графиков, показанных на «главной странице», а также будет включать опцию выхода. Когда я создаю меню и добавляю в него пару пунктов, оно не отображается при запуске приложения. К сожалению, в моих поисках все альтернативы, которые я пробовал, тоже не появляются.
from tkinter import *
from tkinter import ttk
class PicoGridInterfacing(Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.grid()
menubar = Menu(root)
menu = Menu(menubar)
menubar.add_cascade(label="Menu", menu=menu)
menu.add_command(label="History", command=None)
menu.add_command(label="Quit", command=root.quit)
batteryData = Frame(root)
batteryData.grid(row=1, column=0)
Label(batteryData, text="Hello!").grid()
root = Tk()
root.title("Electric Power Systems Lab Pico Grid Interfacing")
app = PicoGridInterfacing(master=root)
root.mainloop()
Вот скриншот результата, который я вижу:
Скриншот вывода
Любая помощь будет с благодарностью принята, спасибо!
Комментарии:
1. Я не понимаю, что именно вы пытаетесь сделать. Вы пытаетесь создать выпадающее меню? Не могли бы вы сказать мне, что именно вы хотите, чтобы программа выполняла?
2. @TheLizzard Извиняется, я впервые использую stack. Я пытаюсь создать выпадающее меню в Tkinter. На данный момент в меню будет только заполнитель для просмотра истории данных и возможность выхода из приложения. Само приложение используется для исследования, чтобы показать графики. Вот ссылка на макет того, как я хотел бы, чтобы выглядел графический интерфейс — imgur.com/a/W7JMZOL
3. На самом деле вы никогда не прикрепляли панель меню к окну — было бы что-то вроде
root.config(menu=menubar)
.4. @jasonharper Вот и все! Не могу поверить, что я, должно быть, пропустил это при просмотре руководств большое вам спасибо!
Ответ №1:
Попробуйте это:
from tkinter import *
from tkinter import ttk
class PicoGridInterfacing(Frame):
def __init__(self, master=None):
super().__init__(master)
# master = master # `super().__init__(master)` already does that so its useless
# Creating the menu
menubar = Menu(root)
menu = Menu(menubar, tearoff=False)
menubar.add_cascade(label="Menu", menu=menu)
menu.add_command(label="History", command=None)
menu.add_command(label="Quit", command=root.destroy)
# Tell the `Tk()` that there is a menu that it need to display:
master.config(menu=menubar)
batteryData = Frame(self)
batteryData.grid(row=1, column=0)
Label(batteryData, text="Hello!").grid()
root = Tk()
root.title("Electric Power Systems Lab Pico Grid Interfacing")
app = PicoGridInterfacing(master=root)
# When you inherit from `Frame` you always what the user to call `.grid`
app.grid()
root.mainloop()
Вам нужно сообщить tkinter.Tk()
, что есть меню, иначе оно его проигнорирует. Также при наследовании от tkinter.Frame
вызывающего абонента вызывается вызов .grid
(это соглашение).
Комментарии:
1. Этот ответ был бы лучше, если бы вы добавили объяснение. В противном случае нам придется сравнивать ваш код с исходным построчно и посимвольно, чтобы увидеть, что вы изменили.
2. @BryanOakley Я подумал, что комментариев было достаточно. Я объясню до конца. Спасибо за предложение.
Ответ №2:
Вам необходимо прикрепить строку меню к корневому окну.
Итак, сделайте это: root.config(menu=menubar)
Комментарии:
1. В следующий раз, пожалуйста, предоставьте немного кода, чтобы показать OP, как это сделать.