2013-01-19 2 views
5

이것은 아주 간단한 것처럼 보입니다. 그러나 나는 그것을 이해하지 못하는 것 같습니다. 단추를 최소 폭으로 만들려면 어떻게합니까? 내가에 넣어 레이아웃의 폭을 확대 유지 다음 예에서, QPushButton을 폭이 QLabel과 같은 끝 :.QPushButton 너비를 최소로 줄이십시오

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import sys 

class MyWindow(QWidget): 

    def __init__(self,parent = None): 

     QWidget.__init__(self,parent) 

     layout = QVBoxLayout() 
     layout.addWidget(QLabel('this is a really, really long label that goes on and on')) 
     layout.addWidget(QPushButton('short button')) 

     self.setLayout(layout) 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    window = MyWindow() 
    window.show() 
    sys.exit(app.exec_()) 

답변

2

http://qt-project.org/doc/qt-4.8/qwidget.html#sizePolicy-prop를 참조 http://qt-project.org/doc/qt-4.8/qsizepolicy.html#Policy-enum을에서 위젯 크기를 제어하는 ​​방법을 배울 수 동적 레이아웃. 당신이 (당신이해야) 혼자 SizePolicy을 변경하여 만족스러운 결과를 얻지 않는 경우에

, 당신은 또한이 좋은 사람으로 볼 수 있었다 : 나를 위해 작동 setMaximumWidth http://qt-project.org/doc/qt-4.8/qspaceritem.html

+1

IIRC QPushButton을가있다 고정 최소 너비 (80 생각), 그것을 정책과 함께 작게하려고하면 정책이 최소 너비를 무시한다는 것을 의미하므로 예측할 수없는 결과가 발생할 것입니다. – chacham15

+1

내 응용 프로그램에서 너비가 8 인 아이콘을 표시하는 최소 및 최대 너비가 모두 16으로 설정된 QPushButton이 있습니다. 의도 한대로 작동합니다. 그러나 OS X에서는 버튼이 다른 모든 버튼과 동일한 OS X Aqua 스타일은 아니지만 크기 속성을 충족시키는 일반 버튼으로 되돌아가는 것으로 보입니다. 그래서 이것은 고려해야 할 부작용입니다. – ypnos

9

from PyQt4 import QtGui 

class Window(QtGui.QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 
     layout = QtGui.QHBoxLayout() 
     texts = [":)", 
       "&Short", 
       "&Longer", 
       "&Different && text", 
       "More && text", 
       "Even longer button text", ] 
     for text in texts: 
      btn = QtGui.QPushButton(text) 
      double = text.count('&&') 
      text = text.replace('&', '') + ('&' * double) 
      width = btn.fontMetrics().boundingRect(text).width() + 7 
      btn.setMaximumWidth(width) 
      layout.addWidget(btn) 
     self.setLayout(layout) 

if __name__ == '__main__': 
    import sys 

    app = QtGui.QApplication(sys.argv) 
    mainWin = Window() 
    mainWin.show() 
    sys.exit(app.exec_()) 
+0

이것은 아주 좋은 데모입니다. 그런데, 너비 = btn.fontMetrics(). boundingRect (re.sub ('& (? = (? : &&) * [^ &])', ''를 사용하여 중간 단계없이 텍스트를 변형 할 수 있습니다. , text)). width() + 7'. 그 다음에 짝수 개의'&'가 오는 모든'&'를 바꿀 수 있습니다. –

+0

이것은'&'가 문자열의 끝에 다시 추가되는 대신 적절하게 처리되도록하는 이점이 있습니다. –