gpt4 book ai didi

python - 使用 Pyside 和 Qt Designer 在 QTableView 中创建组合框

转载 作者:太空狗 更新时间:2023-10-30 01:38:17 26 4
gpt4 key购买 nike

我正在使用 Qt Designer 来管理大型 UI,并使用 Pyside 来管理代码。我希望在我的表格中显示一个 ComboBox。

以下答案非常详细地描述了在您自己管理 UI 时如何完成此操作: PyQt - How to set QComboBox in a table view using QItemDelegate

我的问题是:当 UI 已经由 pyside-uic 为我创建时,这将如何工作?链接中的代码或多或少包括:

class TableView(QtGui.QTableView):
def __init__(self, *args, **kwargs):
QtGui.QTableView.__init__(self, *args, **kwargs)

# Set the delegate for column 0 of our table
self.setItemDelegateForColumn(0, ComboDelegate(self))
[...]
class Widget(QtGui.QWidget):
self._tm=TableModel(self)
self._tv=TableView(self)
self._tv.setModel(self._tm)

这是否意味着如果我有一个 UI 文件,我仍然需要写出来,然后自己调用 TableView 对象之类的东西?我是否应该在 Qt Designer 中创建一个 TableView,然后用我创建的继承自 QTableView 并添加 setItemDelegate 的对象覆盖它?

提前致谢!

最佳答案

示例中的子类是多余的,因为它没有重新实现或添加任何方法。它可以这样重写:

from PySide import QtGui, QtCore
from mainwindowui import Ui_MainWindow

class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
self._model = TableModel(self)
self._delegate = ComboDelegate(self)
self.tableView.setModel(self._model)
self.tableView.setItemDelegateForColumn(0, self._delegate)

因此,table-view 作为对象的一个​​属性被访问,该对象被传递给 pyside-uic 生成的 UI 类的 setupUi 方法。

但是,如果您确实需要从 Qt Designer 中继承其中一个类怎么办?这样做的方法是将其提升为一个自定义类,该类将在导入 python UI 模块时替换它。

如果您在 Qt Designer 中右键单击一个小部件并选择“Promote to...”,它会弹出一个对话框。在对话框中,您可以设置自定义类名(比如“TableView”),并将头文件设置为应该从中导入的 python 模块(比如“mypkg.mainwindow”)。如果您随后单击“提升”,Qt Designer 会将类名显示为 TableView 而不是 QTableView

重新生成 UI 模块后,您会在文件底部看到一个额外的导入行,如下所示:

from mypkg.mainwindow import TableView

因此将使用自定义 TableView 类而不是 QTableView,并从 Qt Designer 获取所有设置 - 加上您想要自己添加的任何重新实现的内容.

关于python - 使用 Pyside 和 Qt Designer 在 QTableView 中创建组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21053594/

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