2013-09-17 3 views
2

Моя идея - отобразить окно ввода пароля в QtGui MainWindow. После выполнения проверки пароля программа выведет на экран оставшиеся кнопки. Я хочу, чтобы мой пароль поле ввода, чтобы быть что-то вроде этогоPyQt - центрирующий виджет в resizable GridLayout

enter image description here

это мой код:

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 для ввода пароля и разместить его всегда в центре независимо от размера основного окна?

ответ

6

Вы можете выполнить это, установив длину строки и столбца. Переместите виджеты в центр сетки, оставляя одну строку и один столбец с обеих сторон, а затем задайте коэффициент растяжения для этих столбцов.

Визуальный пример сетки

+------------------------------+ 
| 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) 
0

Это типичный сценарий использования для QFormLayout. вы не должны использовать для этого макет сетки.

Смежные вопросы