2

基本上我已经为我的游戏创建了一个 pygame 菜单,当我点击它们时它会加载所有其他 pygame 窗口,但是对于添加用户等某些方面,我是在 Tkinter GUI 中创建的。当我单击将它们加载到我的 pygame 上时,它不会加载 Tkinter GUI,有谁知道我该如何解决这个问题,或者是否需要添加一些东西才能使其工作。

它好像要加载一些东西但没有加载,第一个名为“mathsvaders”的加载很好,因为它是一个 pygame 程序,但高分在 tkinter 中并且不加载:

pos = 1
while True:
# events
for e in pygame.event.get():
    if e.type == pygame.QUIT:
        pygame.quit()
        sys.exit()
    elif e.type == pygame.KEYDOWN:
        if e.key == pygame.K_DOWN:
            pos += 1
            if pos > 5:
                pos = 1
        elif e.key == pygame.K_UP:
            pos -= 1
            if pos < 1:
                pos = 5
        elif e.key == pygame.K_RETURN:
            if pos == 1:
                import MathsvadersReal
            elif e.key == pygame.K_RETURN:
             if pos == 2:
                import Highscore
            elif pos == 5:
             pygame.quit()
             sys.exit()

表单代码如下:

import Tkinter import Databaseconnector

 class simpleapp_tk(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent) 
        self.parent = parent
        self.initialize()

    def initialize(self):
      def create_widgets(self):
        # create welcome label
        label1 = Tkinter.Label(self, text = "Hello world")
        label1.grid(row = 0, column = 2, columnspan = 4, sticky = 'E')

if __name__ == "__main__":
    app = simpleapp_tk(None)
    app.title('my application')
    app.geometry("250x200")
    app.mainloop()                              
4

2 回答 2

0

Highscore当您要加载高分时,您的主代码会导入模块,这有两个问题:

  1. Highscore模块中,__name__不等于"__main__"。它等于"Highscore"。因此,simpleapp_tk永远不会创建应用程序,也永远mainloop不会调用它的方法。这可能是您遇到的问题,但这不是此代码的唯一问题。

  2. import语句将其结果缓存在 中sys.modules,因此此代码只能工作一次。要重新加载模块,您必须通过调用reload(Highscore)del sys.modules["Highscore"]

于 2014-07-18T16:25:04.473 回答
0

您在这里使用了两个窗口系统,它们都需要定期处理事件。您已将 pygame 设置为主事件处理循环 ( while True:...),但它永远不会让 Tk 处理它的事件循环。当您调用它时,app.mainloop它永远不会处理事件。当 pygame 没有要处理的事件时,它会在while True循环结束时旋转,这是调用 Tkupdate()方法以允许 Tk 处理事件的好地方。如果您的游戏循环阻塞等待事件,您也可以使用计时器。

简短的回答是处理两个系统的事件。在 pygame 中,调用 pygame 事件方法之一并定期调用 Tk 更新方法。例如:

import tkinter as tk
root = tk.Tk()
... other stuff ...
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    ... game code ...
    root.update()
于 2021-09-08T07:11:27.407 回答