gpt4 book ai didi

python - PyQt 4 : Making a label scrollable

转载 作者:太空狗 更新时间:2023-10-30 01:49:03 24 4
gpt4 key购买 nike

我正在尝试创建一个标签,我可以在其中写下程序的当前状态 - 例如:

“读取数据...”

“正在处理数据……”

“完成。”

如果文本到达标签的底部,那么它应该自动滚动文本,以确保它显示最新的消息(就像控制台窗口那样)。我已经摆弄标签和滚动区域一个多小时了……但无济于事。我试着把我的标签放在一个滚动区域内(这似乎是这里的相关答案所建议的)——这段代码是从 Qt Designer 生成的:

class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(218, 137)
self.frame = QtGui.QFrame(Dialog)
self.frame.setGeometry(QtCore.QRect(209, 399, 161, 111))
self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame.setFrameShadow(QtGui.QFrame.Raised)
self.frame.setObjectName(_fromUtf8("frame"))
self.scrollArea = QtGui.QScrollArea(Dialog)
self.scrollArea.setGeometry(QtCore.QRect(10, 10, 201, 121))
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName(_fromUtf8("scrollArea"))
self.scrollAreaWidgetContents = QtGui.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 199, 119))
self.scrollAreaWidgetContents.setObjectName(_fromUtf8("scrollAreaWidgetContents"))
self.label = QtGui.QLabel(self.scrollAreaWidgetContents)
self.label.setGeometry(QtCore.QRect(15, 10, 151, 101))
self.label.setWordWrap(True)
self.label.setObjectName(_fromUtf8("label"))
self.scrollArea.setWidget(self.scrollAreaWidgetContents)

self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)

然后我的主 .pyw 文件包含:

import sys
from gui_test import *

class MyForm(QtGui.QDialog):

def __init__(self,parent=None):

QtGui.QWidget.__init__(self,parent)
self.ui = Ui_Dialog()
self.ui.setupUi(self)

self.ui.label.setText("Warning: When passing a QString to the constructor or calling setText(), make sure to sanitize your input, as QLabel tries to guess whether it displays the text as plain text or as rich text, a subset of HTML 4 markup. You may want to call setTextFormat() explicitly, e.g. in case you expect the text to be in plain format but cannot control the text source (for instance when displaying data loaded from the Web).")

if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = MyForm()
myapp.show()
sys.exit(app.exec_())

并且滚动区域根本不提供任何滚动条,即使不是所有的文本都被显示。如果我强制滚动条始终打开,它们会变灰,表明它认为没有任何文本可以滚动。

如果有人能帮助我,我将不胜感激。

最佳答案

解决方案 1:在代码中

我发现如果我改变(在 Ui_Dialog 中)我可以让它“工作”:

self.scrollArea.setWidget(self.scrollAreaWidgetContents)

self.scrollArea.setWidget(self.label)

我不知道为什么 QtDesigner 会创建不起作用的代码,而且我不完全理解为什么代码不起作用,而这似乎是有效的。 self.label 将 self.scrollAreaWidgetContents 作为其父级,因此连接似乎就在那里。

因此,我猜我在 QtDesigner 中做错了什么阻止它导出有效的代码。

解决方案 2:在 QT DESIGNER 中

好的,所以我发现如果我执行以下操作,我可以通过 QtDesigner 使其工作:

(1)创建一个ScrollArea[此时不能设置ScrollArea的布局]

(2) 在ScrollArea中放置一个Label

(3) 右击ScrollArea,设置其布局(如Horizo​​ntal Layout)

(4) 导出

这似乎工作得很好。但是,如果我执行以下操作,它将不起作用:

(1) 创建滚动区域

(2)在ScrollArea中放置一个Layout(如Horizo​​ntal Layout)

(3) 在布局中放置标签

(4) 导出

我不太确定这里发生了什么,但是,尽管如此,这些是解决问题的两种方法。

关于python - PyQt 4 : Making a label scrollable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17141611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com