2015-01-12 7 views
5

Wenn ich ein Tkinter-Menü unter OS X erstelle und versuche, eine Menüschaltfläche mit add_comand() hinzuzufügen, wird im Menü nichts angezeigt.Wie funktioniert Menu.add_command() in tkinter auf dem Mac?

Wenn der folgende Code auf Ubuntu ausgeführt wird, erhalte ich eine Menüleiste mit zwei Befehlen mit der Bezeichnung "Rot" und "Blau", die die Hintergrundfarbe des Fensters ändern.

Unter OS X 10.10.1 (Yosemite) werden die Schaltflächen nicht angezeigt. Ich weiß, dass ich mit den Befehlen "Rot" und "Blau" ein Dropdown-Menü erstellen kann, aber in meiner echten App möchte ich das lieber nicht tun.

from platform import python_version_tuple 

major = python_version_tuple()[0] 

if major == '3': 
    import tkinter as tk 
else: 
    import Tkinter as tk 

root = tk.Tk() 

fr = tk.Frame(root, height = 200, width = 200) 
fr.pack() 
menu = tk.Menu(root) 
root.configure(menu=menu) 
menu.add_command(label='Red', command=lambda:fr.configure(bg='red')) 
menu.add_command(label='Blue', command=lambda:fr.configure(bg='blue')) 

root.mainloop() 

Können Sie mir sagen, wie ich tun soll, was ich will?

+1

Während dies bei einigen Systemen möglich ist, führt dies zu einer sehr schlechten Benutzerfreundlichkeit für Ihre App, es sei denn, Sie machen sehr genau klar, welche Elemente Menüs und wann Schaltflächen sind. Es ist am besten, nur Dropdown-Menüs auf Ihrer Menüleiste zu haben. –

Antwort

5

Ich glaube nicht, dass Sie das mit dem nativen ("Aqua") Tk unter OS X tun können und Sie sollten es wahrscheinlich nicht versuchen. OS X native Menüs funktionieren nicht so und Tk versucht, Apples Human Interface Guide for menus zu folgen. Sie müssen eine Menüleiste mit Dropdown Kaskaden haben.

Die TkDocs Website hat eine gute Einführung in Tk menus and their platform differences. (Sie könnte eine X11-basierten Tk auf OS X verwenden, aber das wird nicht empfohlen, da Apple ist nicht X11-Server nicht versendet mehr mit OS X und Ihre Anwendung aussehen würde, und verhalten sich für OS X-Benutzer merkwürdig.)