gpt4 book ai didi

python - 制作延伸到其父窗口之外的 Qt 小部件的图表

转载 作者:行者123 更新时间:2023-12-01 09:33:03 25 4
gpt4 key购买 nike

我正在尝试为下图创建一个基本的 Qt 解决方案:

enter image description here

(在帖子的底部,我包含了一个嵌套字典,如果有人想使用它,可以用来生成小部件图)

基本上,我需要某种可以......的小部件/小部件树

  • 递归地弹出主窗口(如图所示)
  • 存储任意数据,以便我可以像给定图像一样对它们进行不同的样式设置,或者为每个小部件提供不同的操作/工具提示等。
  • 理想情况下,任何解决方案都应该使用某种 View ,以便我可以与其他类型的显示器共享模型

起初我想也许 QTreeWidget 或 QTreeView 可以做到这一点,但我无法让这些类扩展到主窗口之外,如图所示。

我还尝试在 QListWidget 中使用 QMenu 和 QMenuBar,然后使用 QMenu 小部件。这些都没有产生好的结果。但我可能错误地创建了这些。

这是我需要在 Qt 中显示的一些数据:

[
{
'name': 'foo',
'dependencies': [
{
'name': 'bar',
'dependencies': [],
},
{
'name': 'when',
'dependencies': [
{
'name': 'subitem',
'dependencies': [],
},
{
'name': 'will',
'dependencies': [
{
'name': 'it',
'dependencies': [
{
'name': 'end',
'dependencies': [],
'version': 8,
'latest': 10,
},
],
},
],
},
{
'name': 'another',
'dependencies': [],
},
],
},
{
'name': 'thing',
'dependencies': [],
},
],
},
{
'name': 'some_other_thing',
'dependencies': [],
},
{
'name': 'an_asset_with_data',
'dependencies': [],
},
{
'name': 'more_things',
'dependencies': [],
},
]

如有任何帮助,我们将不胜感激。

最佳答案

我建议的解决方案是将QListWidgetQMenu结合使用。

import sys

from PyQt4.QtCore import Qt
from PyQt4.QtGui import QApplication, QListWidget, QListWidgetItem, QMenu


class MenuWidget(QListWidget):
DependenciesRole = Qt.UserRole

def __init__(self, items, parent=None):
QListWidget.__init__(self, parent)
for it in items:
name = it["name"]
dependencies = it["dependencies"]
it = QListWidgetItem(name)
self.addItem(it)
it.setData(MenuWidget.DependenciesRole, dependencies)

def mousePressEvent(self, event):
QListWidget.mousePressEvent(self, event)
it = self.itemAt(event.pos())
if it is not None:
dependencies = it.data(MenuWidget.DependenciesRole)
if dependencies:
menu = QMenu(self)
MenuWidget.add_submenu(menu, dependencies)
p = self.visualRect(self.indexAt(event.pos())).topRight()
menu.popup(self.mapToGlobal(p))

@staticmethod
def add_submenu(menu, items):
for it in items:
name = it["name"]
dependencies = it["dependencies"]
if dependencies:
mn = menu.addMenu(name)
MenuWidget.add_submenu(mn, dependencies)
else:
menu.addAction(name)


d = [
{
'name': 'foo',
'dependencies': [
{
'name': 'bar',
'dependencies': [],
},
{
'name': 'when',
'dependencies': [
{
'name': 'subitem',
'dependencies': [],
},
{
'name': 'will',
'dependencies': [
{
'name': 'it',
'dependencies': [
{
'name': 'end',
'dependencies': [],
'version': 8,
'latest': 10,
},
],
},
],
},
{
'name': 'another',
'dependencies': [],
},
],
},
{
'name': 'thing',
'dependencies': [],
},
],
},
{
'name': 'some_other_thing',
'dependencies': [],
},
{
'name': 'an_asset_with_data',
'dependencies': [],
},
{
'name': 'more_things',
'dependencies': [],
},
]

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MenuWidget(d)
w.show()
sys.exit(app.exec_())

enter image description here

关于python - 制作延伸到其父窗口之外的 Qt 小部件的图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49785026/

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