2014-03-06 37 views
3

運行此代碼將創建一個帶有標籤,lineedit和兩個按鈕的簡單對話框。 所有的小部件都很好地響應對話框水平調整大小。但對話框底部的按鈕在垂直調整大小時不會粘到對話窗口的下邊緣。確保按鈕始終位於對話框底部的可能解決方案是什麼?PyQt:如何將小部件粘貼到對話框的底部邊緣

from PyQt4 import QtCore, QtGui 
app = QtGui.QApplication(sys.argv) 



class mainWindow(QtGui.QMainWindow): 

    def __init__(self): 
     super(mainWindow, self).__init__() 

     mainQWidget = QtGui.QWidget() 
     mainLayout=QtGui.QFormLayout() 
     mainLayout.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow) 

     label = QtGui.QLabel('My Label') 
     lineEdit = QtGui.QLineEdit() 
     mainLayout.addRow(label, lineEdit) 

     ButtonBox = QtGui.QGroupBox() 
     ButtonsLayout = QtGui.QHBoxLayout() 

     Button_01 = QtGui.QPushButton("Close") 
     Button_02 = QtGui.QPushButton("Execute") 

     ButtonsLayout.addWidget(Button_01) 
     ButtonsLayout.addWidget(Button_02) 

     ButtonBox.setLayout(ButtonsLayout) 
     mainLayout.addRow(ButtonBox) 

     mainQWidget.setLayout(mainLayout) 
     self.setCentralWidget(mainQWidget) 


if __name__ == '__main__': 
    window = mainWindow() 
    window.show() 
    window.raise_() 
    window.resize(480,320) 
    app.exec_() 
+0

只需在一個側面說明:如果你想有一個對話框,從'QDialog'不是從'QMainWindow'繼承。 – Hyperboreus

+0

不幸的是QDialog在QMainWindow中沒有'Minimize Dialog'按鈕(在OSX上)。在QDialog上使用QMainWindow有什麼副作用?爲什麼會推薦QMialWindow使用QDialog? – alphanumeric

+0

那麼,QDialog有'接受'和'拒絕'的插槽。它可能是模態的(但我認爲也是一個MainWindow,但不確定)。 – Hyperboreus

回答

1

我會建議使用QVBoxLayout作爲主佈局,與QFormLayout和按鈕的QHBoxLayout,負責之間的拉伸。

由於基於當前的對話框中的一個例子:

import sys 
from PyQt4 import QtGui 


class MainWindow(QtGui.QMainWindow): 

    def __init__(self): 
     super(MainWindow, self).__init__() 

     label = QtGui.QLabel('My Label') 
     line_edit = QtGui.QLineEdit() 

     form_layout = QtGui.QFormLayout() 
     form_layout.addRow(label, line_edit) 

     close_button = QtGui.QPushButton('Close') 
     execute_button = QtGui.QPushButton('Execute') 

     button_layout = QtGui.QHBoxLayout() 
     button_layout.addWidget(close_button) 
     button_layout.addWidget(execute_button) 

     main_layout = QtGui.QVBoxLayout() 
     main_layout.addLayout(form_layout) 
     main_layout.addStretch() 
     main_layout.addLayout(button_layout) 

     central_widget = QtGui.QWidget() 
     central_widget.setLayout(main_layout) 
     self.setCentralWidget(central_widget) 


if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    window = MainWindow() 
    window.resize(480, 320) 
    window.show() 
    sys.exit(app.exec_()) 
+0

非常好!謝謝! – alphanumeric