2013-01-19 9 views
5

Bu çok basit bir şey gibi görünüyor, ancak bunu anlayamıyorum. Düğmeyi minimum genişliği nasıl yaparım. Ben koydum düzeni genişliğine genişleyen tutar Aşağıdaki örnekte, QPushButton genişliği QLabel aynı biter.QPushButton genişliğini en düşük değere küçültme

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_()) 

cevap

2

http://qt-project.org/doc/qt-4.8/qwidget.html#sizePolicy-prop Bkz ve http://qt-project.org/doc/qt-4.8/qsizepolicy.html#Policy-enum widget boyutlandırma nasıl kontrol edileceği üzerinde öğrenmek dinamik bir düzen. Eğer (yapmanız gerekir) yalnız SizePolicy değiştirerek tatmin edici sonuçlar alamazsanız

, ayrıca bu güzel adamlar içine görünebilir: benim için çalışıyor setMaximumWidth http://qt-project.org/doc/qt-4.8/qspaceritem.html

+1

IIRC QPushButton bir sahiptir sabit minimum genişlik (80 bence), bir politika ile daha küçük olmaya zorlamak için çabalamak, öngörülemeyen sonuçlara yol açacaktır çünkü bu, politikanın asgari genişliği yok sayacağı anlamına gelir. – chacham15

+1

Uygulamamda, hem genişlik, hem de en geniş genişliği 16 olarak ayarlanmış bir QPushButton'um var, bir simge 8 genişliğini gösteriyor. İstenildiği gibi çalışıyor. Bununla birlikte, OS X'de düğme, diğer tüm düğmelerle aynı OS X Aqua stiline sahip değildir, ancak boyut özelliklerini yerine getirmek için düz bir düğmeye geri döndürülmüş gibi görünüyor. Yani bu dikkate alınması gereken bir yan etkisidir. – 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

Bu çok güzel bir demo. Bu arada, sadece "width = btn.fontMetrics() yaparak" herhangi bir ara adım olmadan metni dönüştürebilirsiniz. BoundingRect (re.sub ('& (? = (?: &&) * [^ &])', '' , metin)) genişlik() + 7 '. Tüm '' 've ardından çift sayısını' '' ile değiştirebilirsiniz. –

+0

Bu, '&' dizenin sonuna eklenmek yerine yerinde düzgün işlenebilmesi avantajına sahiptir. –