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 に答える