gpt4 book ai didi

python - 在 Python Qt 中访问自定义小部件?

转载 作者:太空宇宙 更新时间:2023-11-03 18:39:11 25 4
gpt4 key购买 nike

通过学习在线示例,我设法将自定义小部件添加到 PyQT4 中的列表框中,这是自定义小部件的代码 progress.py:

from PyQt4 import QtCore, QtGui, QtWebKit

try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s

try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)

class Ui_(QtGui.QWidget):
def __init__(self, name, parent=None):
super(QtGui.QWidget,self).__init__(parent)
self.layoutWidget = QtGui.QWidget()
self.layoutWidget.setGeometry(QtCore.QRect(0, 0, 611, 31))
self.layoutWidget.setObjectName(_fromUtf8("layoutWidget"))
self.gridLayout = QtGui.QGridLayout(self.layoutWidget)
self.gridLayout.setMargin(0)
self.gridLayout.setSpacing(10)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))

self.progressBar = QtGui.QProgressBar(self.layoutWidget)
self.progressBar.setProperty("value", 0)
self.progressBar.setObjectName(_fromUtf8("progressBar"))
self.gridLayout.addWidget(self.progressBar, 0, 1, 1, 1)
self.gridLayout.addWidget(self.graphicsView, 1, 1, 1, 1)

self.webView = QtWebKit.QWebView(self.layoutWidget)
self.webView.setGeometry(QtCore.QRect(0, 0, 500, 200))
self.webView.setUrl(QtCore.QUrl(_fromUtf8("about:blank")))
self.webView.setObjectName(_fromUtf8("webView"))
self.gridLayout.addWidget(self.webView, 1, 1, 1, 1)


QtCore.QMetaObject.connectSlotsByName(self)
#self.label.setText(_translate("", name, None))
self.webView.setHtml(name)
self.setLayout(self.gridLayout)

我使用下面的代码从 main.py 添加并填充此自定义小部件,如下所示:

def on_info_ready(self, data):
info = data.split("\n")
item = QtGui.QListWidgetItem(self.ui.listWidget)
makeHtml = "<h1>" + info[1] + "</h1>"
item_widget = progress.Ui_(makeHtml)
item.setSizeHint(item_widget.sizeHint())
self.ui.listWidget.addItem(item)
self.ui.listWidget.setItemWidget(item,item_widget)

上面的工作完美,但我无法弄清楚如何访问上面添加的作为列表项附加的自定义小部件中的进度条控件。我尝试了以下多种变体,但失败了:

  def on_progress(self, data):
print (data)
self.ui.listWidget.item(0).progressBar.setValue(data)

上面的代码错误如下:

Traceback (most recent call last):
File "C:\Users\kk\Desktop\py4 gui\main.py", line 105, in on_progress
self.ui.listWidget.item(0).progressBar.setValue(data)
AttributeError: 'QListWidgetItem' object has no attribute 'progressBar'
0.0
Traceback (most recent call last):
File "C:\Users\kk\Desktop\py4 gui\main.py", line 105, in on_progress
self.ui.listWidget.item(0).progressBar.setValue(data)
AttributeError: 'QListWidgetItem' object has no attribute 'progressBar'
0.0

最佳答案

使用QListWidget.itemWidget获取您使用QListWidget.setItemWidget设置的小部件.

替换以下行:

self.ui.listWidget.item(0).progressBar.setValue(data)

与:

widget = self.ui.listWidget.itemWidget(self.ui.listWidget.item(0))
widget.progressBar.setValue(data)

关于python - 在 Python Qt 中访问自定义小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20917364/

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