繁体   English   中英

在pyqt中调整滚动区域大小的问题

[英]Issue with resizing a scroll area in pyqt

我在python中使用GUI时有点新兴。 我正在试验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() 

你犯的一般错误就是你没有让布局为你工作。

首先,确保标签添加到垂直布局的顶部:

    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调用。 通常,避免使用小部件的绝对大小和位置; 如果以正确的方式使用,布局机器几乎总能做正确的事情。

最后一个提示:避免使用旧式语法连接信号,并切换到新式语法 (更易读,更不容易出错):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM