用户界面-发送进度值到python的进度条



在我的游戏中,我有两个模块,island.py将岛屿加载到我的游戏中,第二个模块是gui.py,它在游戏开始前处理gui小部件。我的问题是如何将进度值从island.py模块发送到在gui.py模块中创建的进度条编辑:还与加载屏幕的实例一起访问其中的进度条并更改其值。

模块island.py

def __iter__(self):
        total = float(len(self.ground_map))
        import game.gui
        for i in self.get_coordinates():
            yield i
            global count
            count+=1
            progress = (count/total) * 100 
            game.gui.Gui.set_progress(progress)
        global count
        count = 0

在gui.py

def show_loading_screen(self):
    self._switch_current_widget('loadingscreen', center=True, show=True) # Creates the loading screen and its associated widgets, except the progress bar.
@staticmethod
def set_progress(progress):
    # Now I have the progress values, and it will be updated automatically... how can I pass it to the progress bar widget?
    # I need to create the progress bar widget here, but to do that I need to have the self instance to give me the current screen that I will create the progress bar for **AND HERE IS THE PROBLEM!!**
    def update_loading_screen(progress):
        """updates the widget."""
        **self,current**.findChild(name="progressBar")._set_progress(progress)
    update_loading_screen(progress)

我如何使这个update_loading_screen功能?

扩展rocksport的答案…我是这样做的

class GUI:
    def __init__(self):
        GUI.self = self

    @staticmethod
    def set_progressbar():
        print "set progress bar"
        print GUI.self

g = GUI()
g.set_progressbar()

我会用不同的方式来处理这个问题。我会去找pyDispatcher,用它你可以定义qt调用的"插槽和信号",或者你可能只知道"信号",而不是操作系统的SIGNAL。这些信号,当"发出"或执行一系列或一组函数时,您已附加到信号上。插槽是被执行的函数,调度程序保存一个字典,其中包含对插槽的弱引用,并使用你在信号中发出的参数调用它们。

查看pydispatch的示例,了解它们是如何组合在一起的。

,但你会做这样的事情:dispatcher.connect(reciever, signal, sender)connect(game.gui.Gui.set_progress, 'update_progress', island.Class),然后在__iter__中,你会发送一个像send('update_progress', sender=island.Class, progress=progress)这样的信号,这将使用kwargs progress=progress调用update_progress。通过这种方式,您可以将更新进度从静态方法更改为直接更新gui。

如果我理解正确的话,您正在调用静态方法,因此您无法访问self。我假设你只有一个GUI类的实例,你可以设置

 GUI.self = self
在GUI.__init__

静态方法可以访问GUI.self。

进一步阅读请参见http://en.wikipedia.org/wiki/Singleton_pattern和http://code.activestate.com/recipes/52558-the-singleton-pattern-implemented-with-python/

相关内容

  • 没有找到相关文章

最新更新