2014-01-30 42 views
1

的內部放置一個QtGui.QLineEdit line_edit插件被放置的使用.addRow()方法QtGui.QFormLayout形式佈局的內部。PyQt的:LineEdit小部件的的FormLayout

my_formLayout.addRow(my_label, my_lineEdit) 

爲了使line_edit部件堅持一個對話框窗口的邊緣(因此它重新大小與對話)使用sizePolicy嘗試:

sizePolicy = my_lineEdit.sizePolicy() 
    sizePolicy.setHorizontalStretch(1) 
    my_lineEdit.setSizePolicy(sizePolicy) 

有沒有錯誤。但是line_edit小部件仍然不會粘在對話框的邊緣......可能會出現什麼問題?

回答

2

你應該不需要做任何事情。

這個簡單的例子大小調整爲必要的:

from PyQt4 import QtGui 

class Dialog(QtGui.QDialog): 
    def __init__(self): 
     super(Dialog, self).__init__() 
     form = QtGui.QFormLayout(self) 
     label = QtGui.QLabel('Label', self) 
     edit = QtGui.QLineEdit(self) 
     form.addRow(label, edit) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Dialog() 
    window.setGeometry(500, 300, 300, 50) 
    window.show() 
    sys.exit(app.exec_()) 

UPDATE

好吧,似乎QFormaLayout 的行爲是平臺相關。引用來自docs

樣式基於Mac OS X Aqua指南。標籤是右對齊的,字段不會超出尺寸提示,並且表單是水平居中的。

但是,有一個setFieldGrowthPolicy方法,它可以用來覆蓋Mac OSX上的默認行爲。因此,嘗試:

my_formLayout.setFieldGrowthPolicy(QtGui.QFormLayout.ExpandingFieldsGrow) 

或:

my_formLayout.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow) 
+0

感謝您的意見!不幸的是,您的示例使line_edit小部件在對話框中居中。無論主對話窗口有多大或多小,line_edit小部件的大小都保持不變。我想將line_edit小部件的右邊或/和左邊貼到對話框的邊緣(-s)。 – alphanumeric

+0

@Sputnix。你真的運行過我的例子嗎?對我來說,它工作得很好。如果它在所有平臺上都不起作用,我會感到驚訝,但我只在Linux上嘗試過。 – ekhumoro

+0

屏幕截圖:https://imagizer.imageshack.us/v2/1676x570q90/837/nw72.png在Mac OSX上運行它。 – alphanumeric

0

試試這個:sizePolicy.setHorizontalPolicy(QSizePolicy.Expanding)

+0

謝謝!但它不適合我。 line_edit小部件仍未調整大小。也許還有其他一些聰明的建議? – alphanumeric

+0

我認爲你應該發佈一個你正在做什麼的工作代碼,只是爲了測試和建議,佈局不會有點棘手:) –

+0

你是對的!有時他們並不棘手。 – alphanumeric