2

私の考えは、にパスワード入力ボックスを表示することですQtGui MainWindow。パスワードチェックが実行されると、プログラムが呼び出されて残りのボタンが表示されます。パスワード入力欄をこんな感じにしたい

ここに画像の説明を入力

これは私のコードです:

class MainWindow(QtGui.QMainWindow):

    def __init__(self,parent = None):
        super(MainWindow,self).__init__(parent)

        self.CheckPassword()

    def CheckPassword(self):
        username_label = QtGui.QLabel("Username :")
        password_label = QtGui.QLabel("Password :")
        _username = QtGui.QLineEdit()
        _password = QtGui.QLineEdit()

        password_layout = QtGui.QGridLayout()
        password_layout.addWidget(username_label,1,0)
        password_layout.addWidget(password_label,2,0)
        password_layout.addWidget(_username,1,1)
        password_layout.addWidget(_password,2,1)

        password_widget = QtGui.QWidget()
        password_widget.setLayout(password_layout)
        self.setCentralWidget(password_widget)

私の問題は、ウィジェットをcentralwidgetウィンドウと同じ大きさに拡大するように設定したためです。

そこで使用を設定しようとしましsetMaximumSizeたが、その場合、ウィジェットをの中心に配置できないようですMainWindow

パスワード入力用に QWidget のサイズを設定し、メイン ウィンドウのサイズに関係なく常に中央に配置するにはどうすればよいですか?

4

2 に答える 2

8

これは、行と列のストレッチを設定することで実現できます。ウィジェットをグリッドの中央に移動し、両側に 1 つの行と 1 つの列を残してから、それらの列の伸縮係数を設定します。

グリッドの視覚的な例

+------------------------------+
|   s        stretch        s  |
|   t   +-------+-------+   t  |
|   r   | label | input |   r  |
|   e   +-------+-------+   e  |
|   t   | label | input |   t  |
|   c   +-------+-------+   c  |
|   h        stretch        h  |
+------------------------------+

コード:

password_layout = QtGui.QGridLayout()
# Set the stretch
password_layout.setColumnStretch(0, 1)
password_layout.setColumnStretch(3, 1)
password_layout.setRowStretch(0, 1)
password_layout.setRowStretch(3, 1)
# Add widgets
password_layout.addWidget(username_label, 1, 1)
password_layout.addWidget(password_label, 2, 1)
password_layout.addWidget(_username, 1, 2)
password_layout.addWidget(_password, 2, 2)
于 2013-09-17T08:01:05.090 に答える
0

これは、 の一般的な使用シナリオですQFormLayout。そのためにグリッド レイアウトを使用しないでください。

于 2013-09-19T18:40:14.470 に答える