PyQt - PySide自定义小部件无法显示

时间:2012-12-20 17:31:21

标签: python qt pyqt pyside

我正在尝试使用代码创建一个带有按钮和标签的自定义小部件:

from PySide.QtGui import *
from PySide.QtCore import *

class MyWidget(QWidget):
    def __init__(self):
        super(MyWidget, self).__init__()
        self.initUI()
    def initUI(self):
        self.btn = QPushButton('dia', self)
        self.btn.move(20, 20)
        self.le = QLineEdit(self)
        self.le.move(100, 20)

在此之后,我为主框架创建了一个类,并尝试使用代码显示此小部件:

class Example(QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        self.mw = MyWidget()
        self.mw.move(20, 20)

        self.resize(250, 300)
        self.center()
        self.setWindowTitle('Custom Widget Example')
        self.show()

当我从终端运行此脚本时,它显示但是空白。我没有在任何地方看到我的小部件。

我需要做些什么才能显示这个小部件?

谢谢。

1 个答案:

答案 0 :(得分:3)

为什么使用坐标?使用布局:

class MyWidget(QWidget):
    def __init__(self, parent=None):
        super(MyWidget, self).__init__(parent)   #always provide parent!
        self.initUI()
    def initUI(self):
        self.btn = QPushButton('dia', self)
        self.le = QLineEdit(self)
        layout = QHBoxLayout()  #whatever layout you want
        layout.addWidget(self.btn)
        layout.addWidget(self.le)
        self.setLayout(layout)


class Example(QWidget):
    def __init__(self, parent=None):
        super(Example, self).__init__(parent)
        self.initUI()

    def initUI(self):
        self.mw = MyWidget(self)   # remember the parent!
        layout = QHBoxLayout()
        layout.addWidget(self.mw)
        self.setLayout(layout)

        self.resize(250, 300)
        self.center()
        self.setWindowTitle('Custom Widget Example')
        self.show()

如果想要更好地控制元素的处置,请使用网格布局。

如果您真的想使用“绝对坐标”,那么您必须始终记住传递父窗口小部件,否则子窗口小部件将无法自行绘制。