2014-02-02 2 views
1

Я немного новичок в работе с графическими интерфейсами в python. Я экспериментирую с некоторыми функциями в pyqt. Я работаю с областью прокрутки. Над областью прокрутки я хочу разместить текстовую метку. Однако область прокрутки помещается на большую часть текстовой метки. Я хотел бы изменить размер области прокрутки так, чтобы метка была полностью видна. Я думал, что это будет команда:Проблема с изменением размера области прокрутки в pyqt

self.scrollArea.setGeometry() 

Или некоторые вариации из:

self.scrollArea.setWidgetResizable(True) 

Но это не сработало. Кто-нибудь знает правильный способ изменения размера области прокрутки, чтобы мой текст был видимым? Спасибо за любую помощь. Мой код ниже:

import sys 
from PyQt4 import QtGui,QtCore 

class myGUI(QtGui.QWidget): 
def __init__(self): 
    super(myGUI, self).__init__() 
    self.horizontalLayout = QtGui.QVBoxLayout(self) 

    lbl1 = QtGui.QLabel('This will eventually contain a paragraph of useful information', self) 
    lbl1.move(17, 0) 

    self.scrollArea = QtGui.QScrollArea(self) 
    self.scrollArea.setWidgetResizable(True) 
    self.scrollArea.setGeometry(10,10,10,10) 
    self.scrollAreaWidgetContents = QtGui.QWidget() 
    self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 380, 280)) 
    self.horizontalLayout_2 = QtGui.QHBoxLayout(self.scrollAreaWidgetContents) 
    self.gridLayout = QtGui.QGridLayout() 
    self.horizontalLayout_2.addLayout(self.gridLayout) 
    self.scrollArea.setWidget(self.scrollAreaWidgetContents) 

    self.btn1 = QtGui.QPushButton("Button 1") 
    self.btn2 = QtGui.QPushButton("Button 2") 
    self.btn3 = QtGui.QPushButton("Button 3") 

    self.horizontalLayout.addWidget(self.scrollArea) 
    self.horizontalLayout.addWidget(self.btn1) 
    self.horizontalLayout.addWidget(self.btn2) 
    self.horizontalLayout.addWidget(self.btn3) 

    self.connect(self.btn1, QtCore.SIGNAL("clicked()"), self.addButtons) 
    self.setGeometry(300, 200, 500, 500) 
    self.setWindowTitle('myGUI') 

def addButtons(self): 
    for i in range(0, 50): 
     self.r_button = QtGui.QPushButton("Element %s " % i) 
     self.gridLayout.addWidget(self.r_button) 
def run(): 

app = QtGui.QApplication(sys.argv) 
ex = myGUI() 
ex.show() 
sys.exit(app.exec_()) 

if __name__ == "__main__": 
     run() 

ответ

3

Общая ошибка, которую вы делаете, заключается в том, что вы не позволяете макетам работать для вас.

Для начала, убедитесь, что метка добавляется в верхнюю части вертикальной планировки:

lbl1 = QtGui.QLabel('This will eventually contain a paragraph of useful information', self) 
    # get rid of the following line 
    # lbl1.move(17, 0) 
    self.horizontalLayout.addWidget(lbl1) 

и, возможно, также позволяет этикетке обернуть, так что главное окно полностью изменяемое:

lbl1.setWordWrap(True) 

Вы также должны избавиться от всех вызовов setGeometry, отличных от вызовов для самого главного окна. В общем, избегайте использования абсолютных размеров и позиций для виджетов; макет оборудования почти всегда поступает правильно, если он используется правильно.

Один последний совет: не использовать синтаксис старого стиля для подключения сигналов и переключиться на new-style syntax (который является более удобным для чтения и гораздо менее подвержены ошибкам):

# self.connect(self.btn1, QtCore.SIGNAL("clicked()"), self.addButtons) 
    self.btn1.clicked.connect(self.addButtons) 
+0

Спасибо. Ваше решение сработало, но нужна только команда self.horizontalLayout.addWidget (lbl1). setWordWrap только что произвел ошибку. Все так же. Благодарю. – David

+0

@ dave. Линия 'setWordWrap' отлично работает для меня. Какую ошибку вы получили? – ekhumoro

+0

Кажется, теперь это работает, должно быть, было моим воображением. Извини за это. – David

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