2

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

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()

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

我需要做什么才能显示此小部件?

谢谢你。

4

1 回答 1

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()

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

如果你真的想使用“绝对坐标”,那么你必须始终记住传递父小部件,否则子小部件将没有地方绘制自己。

于 2012-12-20T18:01:54.290 回答