我无法将我的 pygame 游戏链接到我的 tkinter GUI
Posted
技术标签:
【中文标题】我无法将我的 pygame 游戏链接到我的 tkinter GUI【英文标题】:I can't link my pygame game to my tkinter GUI 【发布时间】:2013-02-17 02:36:52 【问题描述】:基本上我已经为我的游戏创建了一个 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()
【问题讨论】:
只是一个提示,如果你需要别人的帮助,你应该展示代码示例。 它好像要加载一些东西但没有加载,第一个名为“mathsvaders”的加载很好,因为它是一个 pygame 程序,但高分在 tkinter 中并且不加载: 对不起,它的意思是说 pos == 2,但即使这样它也不起作用。 @SmithJr 这个 sn-p 不足以看出问题出在哪里,使用 Tkinter 函数的部分可能会更有帮助。 我不能确定,因为它周围的代码可能会解决这个问题,但是如果你还在 while 循环中,你几乎无法维护一个 tkinter 应用 【参考方案1】:当你要加载高分时,你的主代码导入了Highscore
模块,这有两个问题:
在Highscore
模块中,__name__
不等于"__main__"
。它等于"Highscore"
。因此,永远不会创建 simpleapp_tk
应用程序,并且永远不会调用它的 mainloop
方法。
这可能是您遇到的问题,但不是这段代码的唯一问题。
import
语句将其结果缓存在sys.modules
中,因此此代码只能运行一次。要重新加载模块,您必须通过调用reload(Highscore)
或del sys.modules["Highscore"]
来明确这样做
【讨论】:
【参考方案2】:您在这里使用了两个窗口系统,它们都需要定期处理事件。您已将 pygame 设置为主事件处理循环 (while True:...
),但它永远不会让 Tk 处理它的事件循环。当您致电app.mainloop
时,它永远不会处理事件。
当 pygame 没有要处理的事件时,它会在 while True
中旋转到此循环的末尾,这是调用 Tk update()
方法以允许 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()
【讨论】:
以上是关于我无法将我的 pygame 游戏链接到我的 tkinter GUI的主要内容,如果未能解决你的问题,请参考以下文章
Google Play 服务在我的 Android 游戏中无法正常运行
我需要将哪些文件链接到我的 xcode 项目(内置游戏制作器)才能使其工作?