2012-03-12 39 views
0

我不确定如何制作一个面板或小部件或 - 什么东西 - 当玩家点击某物时出现。我试着在Qt Designer中制作一个小部件,并使用show()/ hide(),但是当我执行show()时,隐藏(); show()第二个显示语句不起作用,没有任何绘制。如何在PySide中上下文显示信息?

我也有这样的问题,插入一个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设计/ QML装载写一个测试用例来重现问题。

+0

你应该粘贴你的“不工作”的代码。没有看到你在做什么,很难找出问题所在。 'show/hide'和'QGridLayout'的行为肯定如预期。 – Avaris 2012-03-13 00:26:29

+0

添加了测试用例。 如果QGridLayout的行为应该像我应该使用的而不是QGridLayout那样来获得我需要的行为? – Tarinaky 2012-03-13 10:12:50

+0

不,我的意思是'QGridLayout'表现得像你想要的那样。单件商品需要100%。根据尺寸政策分为多个。我仍然需要'* .ui'文件来运行你的代码并观察,但'self = loader.load(file_,self)'行看起来很可疑。您正在为自己设置小部件的父级。 – Avaris 2012-03-13 15:42:32

回答

0

我相信问题在于我的任务是'自我'。我似乎误解了文档中的示例。我不完全确定如何在不失去对Qt Designer功能的访问权的情况下获得正确的行为,但至少我知道错误在哪里。