2015-01-10 115 views
2

我想在pygame中創建一個和tkinter中的菜單一樣的菜單欄。如何爲pygame創建tkinter菜單欄

from tkinter import * 
def donothing(): 
    filewin = Toplevel(root) 
    button = Button(filewin, text="Do nothing button") 
    button.pack() 

root = Tk() 
menubar = Menu(root) 
filemenu = Menu(menubar, tearoff=0) 
filemenu.add_command(label="New", command=donothing) 
filemenu.add_command(label="Open", command=donothing) 
filemenu.add_command(label="Save", command=donothing) 
filemenu.add_command(label="Save as...", command=donothing) 
filemenu.add_command(label="Close", command=donothing) 

filemenu.add_separator() 

filemenu.add_command(label="Exit", command=root.quit) 
menubar.add_cascade(label="File", menu=filemenu) 
editmenu = Menu(menubar, tearoff=0) 
editmenu.add_command(label="Undo", command=donothing) 

editmenu.add_separator() 

editmenu.add_command(label="Cut", command=donothing) 
editmenu.add_command(label="Copy", command=donothing) 
editmenu.add_command(label="Paste", command=donothing) 
editmenu.add_command(label="Delete", command=donothing) 
editmenu.add_command(label="Select All", command=donothing) 

menubar.add_cascade(label="Edit", menu=editmenu) 
helpmenu = Menu(menubar, tearoff=0) 
helpmenu.add_command(label="Help Index", command=donothing) 
helpmenu.add_command(label="About...", command=donothing) 
menubar.add_cascade(label="Help", menu=helpmenu) 

root.config(menu=menubar) 
root.mainloop() 

這是Tkinter的代碼,但沒有人知道如何在pygame的東西,這樣做完全一樣的方式嗎?

謝謝。

回答

0

我認爲這是不可能Tkinter的菜單欄在pygame的整合,它們是不同的工具。

我看你能做的唯一的事情就是直接與pygame的創建菜單欄,使用屏幕主場景只是其中的一部分,而另一個爲菜單欄,它可以用按鈕來創建(與創建矩形或類似物體)。

您還另一種選擇,那就是創建一個單獨的的Tkinter根窗口(不可取的,因爲你將不得不展開爭奪2個主循環:從Tkinter的應用之一,從的一個pygame申請),並與pygame主要應用程序並行運行。

這些都是一些職位,可以幫助你的第二個選項:

  1. Is there anything I need aware of using Tkinter and pygame together?

  2. What gui toolkit should I use with Pygame?

  3. What's the best way to add a GUI to a Pygame application?

  4. Mac and Windows compatible GUI for Python, which is easy to install and works with pygame?

  5. Python Game using pyGame with Window Menu elements

顯然,你也可以使用這個庫wxPython,它允許你一個pygame的窗口整合正常的wxPython窗口內。

2

我用os.environ至pyGame內容與tkiter結合起來,所以你的Tkinter一個內pygame的窗口:

from tkinter import * 
from pygame import * 
from pygame.locals import * 
import os 

我加了一個框架Pygame的是在:

embed = Frame(root, width=w, height=h) 
embed.pack() 
def donothing(): 
    filewin = Toplevel(root) 
    button = Button(filewin, text="Do nothing button") 
    button.pack() 

root = Tk() 
menubar = Menu(root) 
filemenu = Menu(menubar, tearoff=0) 
filemenu.add_command(label="New", command=donothing) 
filemenu.add_command(label="Open", command=donothing) 
filemenu.add_command(label="Save", command=donothing) 
filemenu.add_command(label="Save as...", command=donothing) 
filemenu.add_command(label="Close", command=donothing) 

filemenu.add_separator() 

filemenu.add_command(label="Exit", command=root.quit) 
menubar.add_cascade(label="File", menu=filemenu) 
editmenu = Menu(menubar, tearoff=0) 
editmenu.add_command(label="Undo", command=donothing) 

editmenu.add_separator() 

editmenu.add_command(label="Cut", command=donothing) 
editmenu.add_command(label="Copy", command=donothing) 
editmenu.add_command(label="Paste", command=donothing) 
editmenu.add_command(label="Delete", command=donothing) 
editmenu.add_command(label="Select All", command=donothing) 

menubar.add_cascade(label="Edit", menu=editmenu) 
helpmenu = Menu(menubar, tearoff=0) 
helpmenu.add_command(label="Help Index", command=donothing) 
helpmenu.add_command(label="About...", command=donothing) 
menubar.add_cascade(label="Help", menu=helpmenu) 

root.config(menu=menubar) 

這裏是添加ENVIRON:

# Tell pygame's SDL window which window ID to use 
os.environ['SDL_WINDOWID'] = str(embed.winfo_id()) 
# Show the window so it's assigned an ID. 
root.update() 

# Usual pygame initialization 
pygame.init() 

希望它可以幫助莫名其妙!