簡體   English   中英

Tkinter 中的菜單項無法正常工作(在 MacOS 中)

[英]Menu item in Tkinter is not working properly (in MacOS)

我正在制作一個包含多個頁面的 tkinter 應用程序。 我使用的代碼的簡單版本如下所示。 我將菜單添加到應用程序的根目錄,並提供了一個帶有“重新加載默認值”和“退出”子選項的文件選項。

當我運行此代碼時,我確實得到了菜單,但不是在 GUI 上,而是在 Mac 的主菜單欄上。 而且菜單沒有反應。 我不確定我做錯了什么!

import tkinter as tk
from tkinter import ttk
from tkinter import RAISED


LARGEFONT =("Verdana", 35)

class tkinterApp(tk.Tk):

    # __init__ function for class tkinterApp
    def __init__(self, *args, **kwargs):

        # __init__ function for class Tk
        tk.Tk.__init__(self, *args, **kwargs)

        # creating a container
        container = tk.Frame(self)
        container.pack(side = "top", fill = "both", expand = True)

        container.grid_rowconfigure(0, weight = 1)
        container.grid_columnconfigure(0, weight = 1)

        container2 = tk.Frame(self, relief=RAISED, borderwidth=2)
        container2.pack(side="bottom",fill="both", expand=True)
        container2.grid_rowconfigure(0, weight = 1)
        container2.grid_columnconfigure(0, weight = 1)

        def runProg():
            print("response from runProg")
            #get all entry value from page 2


        runButton = ttk.Button(container2, text="Run", command=runProg)
        runButton.pack(side="left", padx=5, pady=5)

        ######################################################
        ## Menu items
        progMenu = tk.Menu(self,tearoff=0)
        self.config(menu=progMenu)

        #create File menu
        def reload_command():
            pass

        fileMenu = tk.Menu(progMenu)
        progMenu.add_cascade(label="File", menu=fileMenu)
        fileMenu.add_command(label="Reload Defaults", command=reload_command)
        fileMenu.add_command(label="Exit", command=reload_command)
        ######################################################

        # initializing frames to an empty array
        self.frames = {}
        frame = StartPage(container, self)

        self.frames[StartPage] = frame

        frame.grid(row = 0, column = 0, sticky ="nsew")

        self.show_frame(StartPage)

    # to display the current frame passed as
    # parameter
    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

# first window frame startpage

class StartPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        # label of frame Layout 2
        label = ttk.Label(self, text ="Startpage", font = LARGEFONT)

        # putting the grid in its place by using
        # grid
        label.grid(row = 0, column = 2, padx = 10, pady = 10)


app = tkinterApp()
app.mainloop()

任何幫助將不勝感激!

在此處輸入圖片說明

您可能希望將菜單更改為網格頂部的按鈕,因為在 Mac 上您會遇到此錯誤,但在 Windows 上它可以正常工作。 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM