Python Tkinter, les barres de menus ne s'affichent pas
Je suis en train de faire une interface graphique en utilisant Tkinter, et sont venus à la mise en œuvre d'une barre de menu. J'ai regardé quelques tutos et écrit un code pour elle, mais une barre de menu ne semble jamais à apparaître juste une image vierge avec un fond blanc. Cela ne se produit pas seulement pour mon code; de copier et de coller le code de l'un de ces tutoriels en un nouveau script, le même comportement est exposé.
Je l'apprécierais si quelqu'un pourrait faire toute la lumière sur ce qui cause cela. Mon système est OS X 10.5, Python 2.7, Tk 8.4. Voici le code du tutoriel qui ne fonctionne pas:
#!/usr/local/bin/python2.7
from Tkinter import *
from ttk import *
class App(Frame):
def __init__(self):
Frame.__init__(self)
self.master.geometry('400x300')
self.master.title(__file__)
self.pack()
self.menu = Menu(tearoff=False)
self.master.config(menu = self.menu)
fm = self.file_menu = None
fm = Menu(self.menu, tearoff=False)
self.menu.add_cascade(label='File', menu = fm)
fm.add_command(label='Say Hello', command = self.say_hello)
fm.add_separator()
fm.add_command(label='Quit', command = self.quit)
self.mainloop()
def say_hello(self, *e):
self.label = Label(self.master, text='Hello there!')
self.label.pack(anchor=CENTER, fill=NONE, expand=YES, side=LEFT)
if __name__ == '__main__':
App()
et mon code est ici:
from Tkinter import *
class App(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
parent.title("Cluedo Solver 1.0")
menubar = Menu(root)
menubar.add_command(label="File")
menubar.add_command(label="Quit", command=root.quit())
root.config(menu=menubar)
root=Tk()
root.geometry("300x250+300+300")
app=App(root)
root.mainloop()
Votre exemple ne crée jamais de soi.maître, est-ce ton code actuel?
Merci pour la réponse! Ce n'est pas vraiment mon code, c'est quelqu'un d'autre à partir de l'une des tutoriels que j'utilisais, mais ils souffrent tous les deux le même problème alors j'ai pensé que ce serait mieux pour coller celui-ci. Je vais modifier mon post pour y inclure la mienne.
Aussi, vous avez raison, je n'avais pas remarqué que sur lui-même.maître - suppose qu'il a été écrit à la hâte! Si j'ai mis une racine=Tk(), mettre la racine en tant qu'argument de l'Application init (et de l'injecter dans la dernière ligne), mettre une auto.master=racine immédiatement dans init et de mettre de la racine.mainloop() à la fin du script, je trouve toujours le même résultat...
Pouvez-vous s'il vous plaît poster le tutoriel? Je suis en supposant qu'elle est en ligne et il serait grandement nous aider à vous aider.
Résolu. Problème amusant - où puis-je en savoir plus sur
Merci pour la réponse! Ce n'est pas vraiment mon code, c'est quelqu'un d'autre à partir de l'une des tutoriels que j'utilisais, mais ils souffrent tous les deux le même problème alors j'ai pensé que ce serait mieux pour coller celui-ci. Je vais modifier mon post pour y inclure la mienne.
Aussi, vous avez raison, je n'avais pas remarqué que sur lui-même.maître - suppose qu'il a été écrit à la hâte! Si j'ai mis une racine=Tk(), mettre la racine en tant qu'argument de l'Application init (et de l'injecter dans la dernière ligne), mettre une auto.master=racine immédiatement dans init et de mettre de la racine.mainloop() à la fin du script, je trouve toujours le même résultat...
Pouvez-vous s'il vous plaît poster le tutoriel? Je suis en supposant qu'elle est en ligne et il serait grandement nous aider à vous aider.
Résolu. Problème amusant - où puis-je en savoir plus sur
Menu
's? Aussi, si ma réponse a été utile, merci de cliquez sur la coche verte à côté. Cela aidera les autres à reconnaître comme potentiellement utile.
OriginalL'auteur user2163043 | 2013-03-12
Vous devez vous connecter pour publier un commentaire.
Code avec Explication
À partir de l'expérience personnelle, j'ai constaté qu'il est généralement plus facile à gérer tous les widgets widgets méthode. C'est ce que j'ai fait ici, et cela a fonctionné. Aussi, au lieu de parent, j'ai utilisé maître. Je vais maintenant vous guider à travers le code de l'étape-par-étape.
Nous import Tkinter (GUI)
Nous créer une classe appelée
App
, qui est leFrame
où les widgets sont organisées.Nous créer une méthode appelée
__init__
. Ceci initialise la classe, et exécute une autre méthode appeléewidgets
.Nous à créer le
widgets
méthode. C'est là que le widget,menubar
est ajouté. Si nous devions créer plus de widgets, ils seraient également ici.Enfin, nous donnons à l'ensemble de la fenêtre des propriétés. Nous lui donner un titre,
Menubar
, et exécuter laApp
classe. enfin, nous commençons le GUI mainloop avecroot.mainloop
.Wow, bonjour merci pour votre réponse! Étrangement bien quand je le lance, je n'ai pas fait un pop-up gui - python lanceur fonctionne, mais ouvre pas de fenêtre. Si je la place dans une racine.la géométrie("250x300+300+300") après racine.titre cependant, il fait la même chose qu'avant - apporter un vide cadre blanc (cette ligne a été dans mon code d'origine trop désolé j'ai oublié de le mentionner, l'ont édité ma question maintenant). Très étrange. Le tutoriel est ici: skriticos.blogspot.co.royaume-uni/2009/07/.... Merci pour votre aide!
J'ai un mac aussi - je vais exécuter le programme. Alors... Ne la barre de menu afficher ou pas? Il a bien fonctionné pour moi... Ce qui aurait pu arriver, c'est que le Mac de la barre de menus s'affiche dans la barre supérieure, la zone à côté de la pomme de signer et de votre nom de programme. Que, est en fait presque certainement ce qui s'est passé.
Ahhhhh ok je me sens tout à fait stupide maintenant, oui, c'est ce qui s'est passé! Le menu a été là tout le long, mais après 4 ans de posséder un Mac, je ne l'ai toujours pas pensé à chercher dans l'OS X barre de menu. Grand. Merci beaucoup pour votre aide, je certainement n'aurait pas trouvé autrement!
Oui - est grand. J'ai beaucoup appris depuis que j'ai rejoint. Essayez de répondre à quelques questions - souvent vous apprendre plus de répondant que de demander. De toute façon, bonne chance dans votre projet.
OriginalL'auteur xxmbabanexx
Basé sur certains commentaires que vous avez fait à l'un de ces réponses, vous êtes apparemment l'exécution de ce sur un Macintosh. Le code fonctionne très bien, mais le menu s'affiche dans le mac de la barre de menu plutôt que sur la fenêtre comme il le fait sur Windows et Linux. Donc, il n'y a rien de mal avec votre code de la barre de menu.
encore +1, parce que C'est la réponse (eu le même problème)
OriginalL'auteur Bryan Oakley
Vérifier votre barre de menus de mac si vous faites l'interface graphique qui implique la barre de menu qui vous permet d'afficher ou de test. Ses subtiles et vous pouvez penser que vous code n'est pas de travailler. Cliquez sur l'application(dans ce cas, fenêtre python), il affiche une liste déroulante de la barre de menu.
OriginalL'auteur Ikechukwu Henry Odoh
Je suis en train d'essayer le code que ci-dessus, mais tout ce que j'obtiens est "Python" sur macOS barre de menu et c'est d'habitude la conversion. tkinter ne semble tout simplement pas de travail les menus sur macOS 10.14.1
Je pense que ce qui se passe, c'est qu'il y a des mac spécifique des corrections qui sont en train de changer les codes d'événement ainsi que certains éléments de menu va se retrouver sous le Python élément de menu au lieu de là où l'on attend, j'ai vu certains de cela dans mes propres expériences. Lorsque j'ai développé mon code et utilisé une partie de la réserve de FICHIER des codes d'événement au lieu de la norme, les choses ont mieux fonctionné.
OriginalL'auteur Douglas Goodall