【问题标题】:Issue with resizing a scroll area in pyqt在pyqt中调整滚动区域大小的问题
【发布时间】:2014-02-26 07:20:00
【问题描述】:

我对在 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() 

【问题讨论】:

    标签: python user-interface layout pyqt qscrollarea


    【解决方案1】:

    您犯的一般错误是您没有让布局为您完成工作。

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

        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)
    

    【讨论】:

    • 谢谢。您的解决方案有效,但只需要命令 self.horizo​​ntalLayout.addWidget(lbl1) 。 setWordWrap 刚刚产生了一个错误。全都一样。谢谢。
    • @dave。 setWordWrap 行对我来说很好用。你得到了什么错误?
    • 现在好像可以了,一定是我的想象。对此感到抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2019-08-13
    • 2010-09-27
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多