2017-10-16 87 views
-1

我正在用pygame創建一個使用python的小遊戲。Python - 如何在另一個文件的tkinter窗口中運行文件

有一個小問題: 我有我的界面在一個python文件和另一個文件中的遊戲。 問題是,當我點擊我的界面上的遊戲時,它會在第二個窗口中加載遊戲文件,並且我想在界面的當前窗口中執行此文件。 感謝您的時間!

有趣的部分代碼:

接口文件(當點擊獨奏按鈕,執行獨奏定義)

def solo(): 
import Solo 
fenetre.mainloop() 

solo=Button(fenetre, image = pho15, width = 280, height = 81, borderwidth = 0, cursor = "hand2", command = solo) 

獨奏文件(生成一個新窗口)

fen=Tk() 
fen.title("Super Crash") 

coords = (175, 345) 
image = Image.open("on.png") 
photo = ImageTk.PhotoImage(image) 
score=0 

pygame.mixer.init() 
crash = pygame.mixer.Sound("crash.ogg") 
crash.set_volume(0.1) 
bruit = pygame.mixer.Sound("bip.ogg") 
bruit.set_volume(0.01) 

ima1 = Image.open("Rejouer.jpg") 
pho1 = ImageTk.PhotoImage(ima1) 
ima2 = Image.open("Menu.jpg") 
pho2 = ImageTk.PhotoImage(ima2) 

can=Canvas(fen,bg="white", height=800, width=1000) 
can.create_image(0,0, anchor = NW, image = photo) 
can.focus_set() 
can.bind("<KeyPress>", monter) 
can.pack() 

anim() 

init() 
+0

的[嵌入一個Pygame的窗口到TKinter或者wxPython的幀(https://stackoverflow.com/questions/23319059/embedding-a-pygame-window-into-a-tkinter-or可能的複製-wxpython-frame) –

回答

0

的它創建另一個窗口的原因是因爲fen = Tk()將創建一個新的應用程序窗口。如果你四處搜索,你可以找到一些這樣做的例子,但是下面是如何在另一個內部啓動外部tkinter應用程序。

主文件運行此文件(main.py或其他),並單擊按鈕

from tkinter import * 
from subprocess import Popen 

def launchExternal(parent): 

    container = Frame(parent, container=True) 
    container.pack(expand=True, fill='both') 
    ''' Pass the window id of the container frame in this main application 
     to the external program. See solo.py for putting content in the 
     container. 
    ''' 
    process = Popen(['python', 'solo.py', str(container.winfo_id())]) 

# Create the main application GUI (this file) 
root = Tk() 
# Define the external program name (will be solo.py) 
program = 'solo' 
# For fun, click this button multiple times to see what happens. 
solo = Button(root, text="Launch solo", width = 10, height = 10, borderwidth = 0, 
    cursor = "hand2", command = lambda r=root: launchExternal(r)) 
solo.pack() 

root.mainloop() 

這是外部的(solo.py)文件。

from tkinter import * 
import sys 

def createInnerUI(master): 
    canvas = Canvas(master, bg='blue') 
    canvas.pack(pady=5) 
    label = Label(master, text="Demonstrate embedded application", bg='green') 
    label.pack() 

if len(sys.argv) < 1: 
    root=Tk() 
else: 
    target_window_id = sys.argv[-1] 
    root = Tk(use=target_window_id) 

createInnerUI(root) 
root.mainloop() 
+0

謝謝,所以完整的solo.py文件在createInnerUI函數中?它不適用於整個程序 –

+0

不一定。如果您願意,可以創建其他功能以將元素添加到GUI。例如,canvas可以在'root = Tk(use = target_window_id)'之後創建,並且在調用'createInnerUI(root)'之前創建,但是我選擇將它放在帶有標籤的函數中。嘗試移動的東西,看... –

+0

至於*它不適用於整個程序*我不確定你的意思。 –

相關問題