User interface 在pygame中添加wxpython
我正在寻找一种将wxpythongui元素添加到pygame中的方法。如果有其他方法可以解决向pygame添加GUI元素的目的,请建议这样做。我在安装PGU时遇到问题。谢谢您的帮助。我认为这是不可能的,因为wxPython(使用wxWidgets c++)是窗口管理系统的包装器,它依赖操作系统函数在屏幕上绘制(它根据操作系统转换为正确的系统调用) Pygame使用SDL和一个简单的窗口管理系统代码,它调用一些操作系统函数来创建窗口,并将其交给SDL在其上绘制,就像画布一样 一种方法是:User interface 在pygame中添加wxpython,user-interface,wxpython,pygame,User Interface,Wxpython,Pygame,我正在寻找一种将wxpythongui元素添加到pygame中的方法。如果有其他方法可以解决向pygame添加GUI元素的目的,请建议这样做。我在安装PGU时遇到问题。谢谢您的帮助。我认为这是不可能的,因为wxPython(使用wxWidgets c++)是窗口管理系统的包装器,它依赖操作系统函数在屏幕上绘制(它根据操作系统转换为正确的系统调用) Pygame使用SDL和一个简单的窗口管理系统代码,它调用一些操作系统函数来创建窗口,并将其交给SDL在其上绘制,就像画布一样 一种方法是: 使用c
- 使用ctypes对OS库文件进行C调用以绘制系统本机小部件,这样您就不用使用任何pygame函数
- 我不知道怎么做,但我正在寻找一种方法将小部件转换为图像缓冲区对象,并像使用曲面(普通位图)一样使用它
- 使用pygame,使用表面和鼠标/键盘事件构建您自己的GUI来控制它或下载一些预先制作的
- 坚持使用wx,您可以在系统本机主题上轻松构建GUI,也可以使用DC(绘制上下文)像pygame一样绘制,或者(不确定)将pygame上下文作为一个小部件包含到wx中。 您可以从wx拥有自己的事件处理程序中获益
我希望它能在某种程度上帮助您。我认为这是不可能的,因为wxPython(使用wxWidgets c++)是窗口管理系统的包装器,它依赖于操作系统函数在屏幕上绘制(它根据操作系统转换为正确的系统调用) Pygame使用SDL和一个简单的窗口管理系统代码,它调用一些操作系统函数来创建窗口,并将其交给SDL在其上绘制,就像画布一样 一种方法是:
- 使用ctypes对OS库文件进行C调用以绘制系统本机小部件,这样您就不用使用任何pygame函数
- 我不知道怎么做,但我正在寻找一种方法将小部件转换为图像缓冲区对象,并像使用曲面(普通位图)一样使用它
- 使用pygame,使用表面和鼠标/键盘事件构建您自己的GUI来控制它或下载一些预先制作的
- 坚持使用wx,您可以在系统本机主题上轻松构建GUI,也可以使用DC(绘制上下文)像pygame一样绘制,或者(不确定)将pygame上下文作为一个小部件包含到wx中。 您可以从wx拥有自己的事件处理程序中获益
我希望它能在某种程度上帮助你。不;您可以将wxWidgets添加到PyGame。添加打开/保存对话框、按钮等并不重要。有时,当您尝试共享区域时,情况会变得糟糕(如上所述,存在冲突的窗口系统),但这绝对是可行的 我在接下来的几年前写的,所以很混乱;但至少很简单。它应该可以帮助您开始:
class SDLThread:
def __init__(self,screen):
self.m_bKeepGoing = self.m_bRunning = False
self.screen = screen
self.color = (255,0,0)
self.rect = (10,10,100,100)
def Start(self):
self.m_bKeepGoing = self.m_bRunning = True
thread.start_new_thread(self.Run, ())
def Stop(self):
self.m_bKeepGoing = False
def IsRunning(self):
return self.m_bRunning
def Run(self):
while self.m_bKeepGoing:
pass
## GetInput()
## Draw()
self.m_bRunning = False;
class SDLPanel(wx.Panel):
def __init__(self,parent,ID,tplSize):
global pygame
wx.Panel.__init__(self, parent, ID, size=tplSize)
self.Fit()
os.environ['SDL_WINDOWID'] = str(self.GetHandle())
os.environ['SDL_VIDEODRIVER'] = 'windib'
import pygame
pygame.init()
icon = pygame.Surface((1,1));icon.set_alpha(0);pygame.display.set_icon(icon)
global Surface
Surface = pygame.display.set_mode(tplSize)
self.thread = SDLThread(Surface)
self.thread.Start()
def __del__(self):
self.thread.Stop()
没有;您可以将wxWidgets添加到PyGame。添加打开/保存对话框、按钮等并不重要。有时,当您尝试共享区域时,情况会变得糟糕(如上所述,存在冲突的窗口系统),但这绝对是可行的 我在接下来的几年前写的,所以很混乱;但至少很简单。它应该可以帮助您开始:
class SDLThread:
def __init__(self,screen):
self.m_bKeepGoing = self.m_bRunning = False
self.screen = screen
self.color = (255,0,0)
self.rect = (10,10,100,100)
def Start(self):
self.m_bKeepGoing = self.m_bRunning = True
thread.start_new_thread(self.Run, ())
def Stop(self):
self.m_bKeepGoing = False
def IsRunning(self):
return self.m_bRunning
def Run(self):
while self.m_bKeepGoing:
pass
## GetInput()
## Draw()
self.m_bRunning = False;
class SDLPanel(wx.Panel):
def __init__(self,parent,ID,tplSize):
global pygame
wx.Panel.__init__(self, parent, ID, size=tplSize)
self.Fit()
os.environ['SDL_WINDOWID'] = str(self.GetHandle())
os.environ['SDL_VIDEODRIVER'] = 'windib'
import pygame
pygame.init()
icon = pygame.Surface((1,1));icon.set_alpha(0);pygame.display.set_icon(icon)
global Surface
Surface = pygame.display.set_mode(tplSize)
self.thread = SDLThread(Surface)
self.thread.Start()
def __del__(self):
self.thread.Stop()
令人惊讶的是,python无法添加按钮,在Java中,这是非常直接的。请证明我错了!!副本。请继续更新您的原始问题,并提供有关您遇到的问题的更多详细信息。这是可能的,因为我以前已经这样做过。虽然我希望它更兼容。wxPython比任何pygame GUI库都要好得多。PGU太差劲了!!!甚至不用下载了。当你把pygame放在wxpython中时,你所能做的非常有限,尽管在GUI方面,它看起来很不错。令人惊讶的是,python没有办法添加按钮,在Java中它是非常直接的。请证明我错了!!副本。请继续更新您的原始问题,并提供有关您遇到的问题的更多详细信息。这是可能的,因为我以前已经这样做过。虽然我希望它更兼容。wxPython比任何pygame GUI库都要好得多。PGU太差劲了!!!甚至不用下载了。当你把pygame放到wxpython中时,你所能做的是非常有限的,尽管从GUI角度来看,它看起来很不错。这看起来很有希望,但你能展示一下如何将它与pygame演示结合起来吗?@MarcMaxmeister如果我今天写下这个答案,我会说:“不要这样做。不要将wx小部件添加到pygame中,而是将pygame表面操作添加到wx应用程序中。这将更简单、更清晰、更快、更容易“这还为时过早。我花了数小时编写了自己的函数,用于在pygame中创建右键单击上下文菜单,虽然这些函数可以工作,但它们似乎没有一个可以正常工作的结构。太多参与游戏循环了。这看起来很有希望,但你能展示一下如何将其与pygame演示结合起来吗?@MarcMaxmeister如果我今天要写这个答案,我会说:“不要这样做。不要将wx小部件添加到pygame中,而是将pygame表面操作添加到wx应用程序中。这将更简单、更清晰、更快、更容易。”因此,也许写“这是微不足道的”还为时过早。我花了数小时编写自己的函数,在pygame中创建右键单击上下文菜单,虽然它们可以工作,但它们似乎没有一个能正常工作的结构。为此,游戏循环涉及太多。