我已经在pyqt4中创建了一个自定义小部件,我已经进行了测试,现在可以将它加载到我的主窗口中了。由于它没有出现在设计器中,我需要手动将其手动添加到我的主窗口。
我的小部件使用uic加载ui文件,而不是将其转换为py文件(到目前为止,它的麻烦更快),所以它看起来像这样:
class widgetWindow(QtGui.QWidget):
def __init__(self, parent = None):
super(widgetWindow, self).__init__(parent)
self.ui = uic.loadUi("widget.ui")
#everything else
现在在我的主类(简洁示例)中创建布局,将小部件添加到布局中,然后将其添加到主窗口小部件
class main(QtGui.QMainWindow):
def __init__(self, parent = None):
super(main, self).__init__(parent)
self.ui = uic.loadUi("testWindow.ui")
mainlayout = QtGui.QVBoxLayout()
window = widgetWindow(self)
mainlayout.addWidget(window)
centerWidget = QtGui.QWidget()
centerWidget.setLayout(mainlayout)
self.ui.setCentralWidget(centerWidget)
没有抛出任何错误,它会为小部件腾出空间,但它根本不会显示任何内容。
添加行window.ui.show()只会弹出一个新窗口,超出它应该占用主窗口的空间。我错过了什么?
答案 0 :(得分:2)
对uic loader进行更多研究,有两种方法可以加载ui文件。我在问题中使用它的方式是一种方式,另一种方式是使用uic.loadUiType()。这将创建要由类对象继承的基类和表单类,而不仅仅是QtGui.QWidget类对象。
widgetForm, baseClass= uic.loadUiType("addTilesWidget.ui")
class windowTest(baseClass, widgetForm):
def __init__(self, parent = None):
super(windowTest, self).__init__(parent)
self.setupUi(self)
这样,窗口小部件可以按预期加载到另一个窗体中。至于为什么,我还没有找到答案。
有关不同设置类型的更多信息:http://bitesofcode.blogspot.com/2011/10/comparison-of-loading-techniques.html
答案 1 :(得分:0)
尝试将parent参数添加到loadUi语句中:
self.ui = uic.loadUi("widget.ui",parent)
self.ui = uic.loadUi("testWindow.ui",self)
在主课程结束时尝试以下一行。
self.setCentralWidget(centerWidget)
答案 2 :(得分:0)
您需要指定'centerWidget'是主窗口的中央窗口小部件。 你的 class main 的代码应该有一行代码: self.setCentralWidget(centerWidget)
class main(QMainWindow):
def __init__(self, parent = None):
super(main, self).__init__(parent)
....
self.setCentralWidget(centerWidget)
class main(QMainWindow):
def __init__(self, parent = None):
super(main, self).__init__(parent)
....
self.setCentralWidget(centerWidget)