Python 在pyqt中调整滚动区域大小的问题
我对在python中使用GUI有点陌生。我正在试验pyqt中的一些特性。我正在使用滚动区域。在滚动区域上方,我希望放置一个文本标签。但是,滚动区域会在大部分文本标签上张贴。我想调整滚动区域的大小,使标签完全可见。我想应该是命令:Python 在pyqt中调整滚动区域大小的问题,python,user-interface,layout,pyqt,qscrollarea,Python,User Interface,Layout,Pyqt,Qscrollarea,我对在python中使用GUI有点陌生。我正在试验pyqt中的一些特性。我正在使用滚动区域。在滚动区域上方,我希望放置一个文本标签。但是,滚动区域会在大部分文本标签上张贴。我想调整滚动区域的大小,使标签完全可见。我想应该是命令: self.scrollArea.setGeometry() 或以下各项的某些变化: self.scrollArea.setWidgetResizable(True) 但这些都不起作用。有人知道调整滚动区域大小以使我的文本可见的正确方法吗?谢谢你的帮助。我的代码如下:
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.horizontalLayout.addWidget(lbl1)命令。setWordWrap刚刚产生了一个错误。尽管如此。“谢谢。”戴夫。
setWordWrap
行对我来说很好。你犯了什么错误?它现在似乎起作用了,一定是我的想象。很抱歉。
# self.connect(self.btn1, QtCore.SIGNAL("clicked()"), self.addButtons)
self.btn1.clicked.connect(self.addButtons)