如何在PySide中上下文显示信息?

时间:2012-03-12 19:05:56

标签: python qt pyside

我不确定如何制作一个面板或小部件或者某些东西 - 当玩家点击某些东西时会出现。

我尝试在Qt Designer中制作一个小部件并在其上使用show()/ hide()但是当我执行show()时;隐藏(); show()第二个show语句不起作用,什么都没画。

我还有一个问题,即将它插入gridLayout导致整个网格在两者之间被分割为50/50 - 我无法为面板设置最大尺寸 - 并且从布局中删除小部件不会改变分裂回到100%。 我已经搜索了stackoverflow,但我能找到的是我应该显示的建议()/ hide(),这似乎不像宣传的那样工作。有没有人有任何见解?这似乎应该是容易做到的事情。

PS:我不介意它看起来只要它可用。该项目的部分目标是尽可能快地和丑陋地构建游戏。

编辑:按要求添加测试用例...

class GameWindow(QtGui.QWidget):
    def __init__(self):
        super(GameWindow, self).__init__()

        # Load ui file.
        loader = QtUiTools.QUiLoader()
        file_ = QtCore.QFile("forms/GameWindow.ui")
        file_.open(QtCore.QFile.ReadOnly)
        self = loader.load(file_,self)

        # Add viewport.
        self.viewport = GameViewport(self)
        self.gridLayout.addWidget(self.viewport, 0, 0)
        self.horizontalScrollBar.valueChanged.connect(self.viewport.update)
        self.verticalScrollBar.valueChanged.connect(self.viewport.update)

        # Add planetDetails
        self.planetDetails = PlanetDetails(None)

        # Show and perform initial draw.    
        self.show()

class GameViewport(QtGui.QWidget):
    def __init__(self,parent):
        super(GameViewport,self).__init__()

        self.parent = parent
    def mousePressEvent(self,event):
        self.parent.planetDetails.set_planet(None)

class PlanetDetails(QtGui.QWidget):
    def __init__(self,parent):
        super(PlanetDetails, self).__init__()

        self.parent = parent

        self.planet = None

        # Load ui file.
        loader = QtUiTools.QUiLoader()
        file_ = QtCore.QFile("forms/PlanetDetails.ui")
        file_.open(QtCore.QFile.ReadOnly)
        self = loader.load(file_,self)

        self.pushButton.clicked.connect(self.hide)

    def set_planet(self, planet):
        self.planet = planet
        self.show()

然而,在没有Qt Designer / QML加载的情况下编写的测试用例中,我无法解决问题。

1 个答案:

答案 0 :(得分:0)

我认为问题在于我对“自我”的任务。我似乎误读了文档中的示例。我不完全确定如何在不失去对Qt Designer功能的访问权限的情况下获得正确的行为,但至少我知道错误的位置。