Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 在pygame中添加wxpython_User Interface_Wxpython_Pygame - Fatal编程技术网

User interface 在pygame中添加wxpython

User interface 在pygame中添加wxpython,user-interface,wxpython,pygame,User Interface,Wxpython,Pygame,我正在寻找一种将wxpythongui元素添加到pygame中的方法。如果有其他方法可以解决向pygame添加GUI元素的目的,请建议这样做。我在安装PGU时遇到问题。谢谢您的帮助。我认为这是不可能的,因为wxPython(使用wxWidgets c++)是窗口管理系统的包装器,它依赖操作系统函数在屏幕上绘制(它根据操作系统转换为正确的系统调用) Pygame使用SDL和一个简单的窗口管理系统代码,它调用一些操作系统函数来创建窗口,并将其交给SDL在其上绘制,就像画布一样 一种方法是: 使用c

我正在寻找一种将wxpythongui元素添加到pygame中的方法。如果有其他方法可以解决向pygame添加GUI元素的目的,请建议这样做。我在安装PGU时遇到问题。谢谢您的帮助。

我认为这是不可能的,因为wxPython(使用wxWidgets c++)是窗口管理系统的包装器,它依赖操作系统函数在屏幕上绘制(它根据操作系统转换为正确的系统调用)

Pygame使用SDL和一个简单的窗口管理系统代码,它调用一些操作系统函数来创建窗口,并将其交给SDL在其上绘制,就像画布一样

一种方法是:

  • 使用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中创建右键单击上下文菜单,虽然它们可以工作,但它们似乎没有一个能正常工作的结构。为此,游戏循环涉及太多。