簡體   English   中英

更改為 pygame 窗口時如何關閉 tkinter 窗口?

[英]How can I close a tkinter window when changing to a pygame window?

我正在使用 tkinter 和 pygame 創建游戲,但當程序從菜單中啟動 pygame 時,我不知道如何關閉 tkinter 窗口。 我將不勝感激任何幫助,謝謝。

# Importing Widgets and from different modules:
import Customised_Widgets as cw
# Importing the libraries required to operate the program:
import pygame as py
import tkinter as tk
from tkinter import *
import DOG_BackEnd as be

LARGE_FONT = ("Comic Sans MS", 20) # Font for large text selected

# Classes that help create all the menus using tkinter


class Dog(tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)
        tk.Tk.iconbitmap(self, default="N:/ICT/A levels/Year 13/NEA/Game Files/D.O.G.ico")
        tk.Tk.wm_title(self, "D.O.G.")
        tk.Tk.wm_geometry(self, "960x720")
        tk.Tk.wm_resizable(self, False, False)

        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        """self.image = tk.PhotoImage(file="N:/ICT/A levels/Year 13/NEA/Game Files/Fonts/Menu Font.png")
        self.image2 = tk.PhotoImage(file="N:/ICT/A levels/Year 13/NEA/Game Files/Fonts/Options Font.png")
        self.image3 = tk.PhotoImage(file="N:/ICT/A levels/Year 13/NEA/Game Files/Fonts/Paused Font.png")"""

        self.frames = {}

        for F in (MainMenu, PauseMenu, OptionsMenu):
            frame = F(container, self)

            self.frames[F] = frame

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

        self.show_frame(MainMenu)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

主菜單

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

        tk.Frame.configure(self, background="#99D9EA")

        self.menu_image = tk.PhotoImage(file="N:/ICT/A levels/Year 13/NEA/Project Design/Slide1.png")

        tk.Label(self, image=self.menu_image).place(x=0, y=0)

        button1 = cw.Button(self, default="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Main Menu/Play Button.gif",
                            hover="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Main Menu/Play Button 2.gif",
                            highlightthickness=0, highlightbackground="#99D9EA", bd=0, borderwidth=0, activebackground="#99D9EA", command=be.Game)
        button1.place(x=660, y=215)

        button2 = cw.Button(self, default="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Main Menu/Options Button.gif",
                            hover="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Main Menu/Options Button 2.gif",
                            highlightbackground="#99D9EA", activebackground="#99D9EA", bd=0, borderwidth=0, highlightthickness=0, command=lambda: controller.show_frame(OptionsMenu))
        button2.place(x=660, y=293)

        button3 = cw.Button(self, default="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Main Menu/Exit Button.gif",
                            hover="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Main Menu/Exit Button 2.gif",
                            highlightthickness=0, highlightbackground="#99D9EA", borderwidth=0, bd=0, command=lambda: controller.destroy())
        button3.place(x=660, y=366)

選項菜單

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

        tk.Frame.configure(self, background="#99D9EA")

        self.menu_image = tk.PhotoImage(file="N:/ICT/A levels/Year 13/NEA/Project Design/Slide2.png")

        tk.Label(self, image=self.menu_image).place(x=0, y=0)

        button1 = cw.Button(self, default="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Options Menu/Music Button.gif",
                            hover="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Options Menu/Music Button 2.gif",
                            highlightthickness=0, highlightbackground="#99D9EA", bd=0, borderwidth=0, activebackground="#99D9EA", command=lambda: controller.show_frame(OptionsMenu))
        button1.place(x=414, y=129)

        button2 = cw.Button(self, default="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Options Menu/SFX Button.gif",
                            hover="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Options Menu/SFX Button 2.gif",
                            highlightthickness=0, highlightbackground="#99D9EA", bd=0, borderwidth=0, activebackground="#99D9EA", command=lambda: controller.show_frame(OptionsMenu))
        button2.place(x=414, y=210)

        button3 = cw.Button(self, default="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Options Menu/Location Button.gif",
                            hover="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Options Menu/Location Button 2.gif",
                            highlightthickness=0, highlightbackground="#99D9EA", bd=0, borderwidth=0, activebackground="#99D9EA", command=lambda: controller.show_frame(OptionsMenu))
        button3.place(x=414, y=291)

        button4 = cw.Button(self, default="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Options Menu/Exit Button.gif",
                            hover="N:/ICT/A levels/Year 13/NEA/Game Files/Buttons/Options Menu/Exit Button 2.gif",
                            activebackground="#EED9EA", highlightthickness=0, highlightbackground="#99D9EA", borderwidth=0, bd=0, command=lambda: controller.show_frame(MainMenu))
        button4.place(x=414, y=371)

暫停菜單

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

        tk.Frame.configure(self, background="#99D9EA")

        self.menu_image = tk.PhotoImage(file="N:/ICT/A levels/Year 13/NEA/Project Design/Slide3.png")

        tk.Label(self, image=self.menu_image).place(x=0, y=0)

        button1 = cw.Button(self, text="-", command=lambda: controller.show_frame(MainMenu))
        button1.pack()


if __name__ == "__main__":
    root = Dog()
    root.mainloop()

(類都在同一個文件中,為了更好的可讀性,我拆分了代碼)

這里的代碼是我程序的后端,這個模塊包含了我所有的 pygame 代碼:

import DOG_FrontEnd
import pygame as py, sys
from pygame.locals import *


displayw = 960
displayh = 720

py.display.set_caption("Don't Over Grill (D.O.G)")

screen = py.display.set_mode((displayw, displayh), 0, 32)

clock = py.time.Clock()

player_sprite = py.image.load("N:/ICT/A levels/Year 13/NEA/Game 
Files/Sprites/Ishmael/Running/Run 1.png")
player_sprite2 = py.image.load("N:/ICT/A levels/Year 13/NEA/Game 
Files/Sprites/Shiba/Stationary 1.png")
background = py.image.load("N:/ICT/A levels/Year 13/NEA/Game Files/Map/Desert Map 1.png")
icon = py.image.load("N:/ICT/A levels/Year 13/NEA/Game Files/D.O.G.ico")

py.display.set_icon(icon)


class Game:
    py.init()

    def __init__(self, *args, **kwargs):
        self.done = False
        self.close()

    def close(self):
        while not self.done:
            screen.blit(background, (0, 0))
            screen.blit(player_sprite, (20, 450))
            for event in py.event.get():
                if event.type == py.QUIT:
                    self.done = True

                py.display.flip()

        py.display.update()
        clock.tick(60)

這里的代碼是我的類,用於為我的 tkinter 窗口導入自定義按鈕:

import tkinter as tk


class Button(tk.Button):
    def __init__(self, parent, default="", hover="", **kwargs):
        tk.Button.__init__(self, master=parent, **kwargs)
        self.default = tk.PhotoImage(file=default)
        self.hover = tk.PhotoImage(file=hover)
        self.configure(image=self.default)
        self.bind("<Leave>", self.on_leave)
        self.bind("<Enter>", self.on_enter)

    def on_leave(self, event):
        self.configure(image=self.default)

    def on_enter(self, event):
        self.configure(image=self.hover)

關於應該何時發生以及您想要關閉哪個 Tkinter 窗口的更多信息。 也許我只是找不到它應該在哪里?

但是你可以從window_name.destroy() 那應該關閉給定的窗口。 你似乎已經在使用那個功能了,那應該對你有用嗎?

我可以找到你實際使用pygame 沒有使用這個庫的代碼行,對嗎?

暫無
暫無

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

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