gpt4 book ai didi

python - 从文本文件填充 UI - python

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

我将我的问题分解为一个非常基本的设置。每个选项卡都允许用户单击一个按钮并将项目添加到列表中。在将项目添加到列表的同时,它也被添加到一个名为 ALLITEMs 的全局变量中。每个选项卡都在字典上给出,可以附加到此处..

ALLITEMS = {
"A" : [],
"B" : []
}

在“closeEvent”的主要小部件中,我将这个变量保存到一个 json 文件中。同样在主要小部件“showEvent”中,我将此数据加载回全局变量 ALLITEMS。这允许用户在每次启动应用程序时保留数据。我不确定的是如何刷新选项卡小部件以使用变量中的数据重新填充 GUI。但仅当该工具最初启动时。我不希望每次用户单击该选项卡时都加载它,这会产生重复数据。

enter image description here

import sys
import json
import os
from PySide import QtGui, QtCore

ALLITEMS = {
"A" : [],
"B" : []
}

# Widgets
# ------------------------------------------------------------------------------
class ExampleA(QtGui.QWidget):

def __init__(self):
super(ExampleA, self).__init__()
self.initUI()

def initUI(self):
# formatting
self.resize(550, 400)
self.setWindowTitle("Tab A")

# widgets
self.ui_listview = QtGui.QListWidget()
self.ui_add = QtGui.QPushButton("Add Item")

# signals
self.ui_add.clicked.connect(self.add_item_clicked)

# main layout
main_layout = QtGui.QVBoxLayout()
main_layout.addWidget(self.ui_add)
main_layout.addWidget(self.ui_listview)
main_layout.setContentsMargins(0,0,0,0)
self.setLayout(main_layout)

def add_item_clicked(self):
global ALLITEMS
item = "Another item A"
ALLITEMS["A"].append(item)
self.ui_listview.addItem( item )


class ExampleB(QtGui.QWidget):

def __init__(self):
super(ExampleB, self).__init__()
self.initUI()

def initUI(self):
# formatting
self.resize(550, 400)
self.setWindowTitle("Tab A")

# widgets
self.ui_listview = QtGui.QListWidget()
self.ui_add = QtGui.QPushButton("Add Item")

# signals
self.ui_add.clicked.connect(self.add_item_clicked)

# main layout
main_layout = QtGui.QVBoxLayout()
main_layout.addWidget(self.ui_add)
main_layout.addWidget(self.ui_listview)
main_layout.setContentsMargins(0,0,0,0)
self.setLayout(main_layout)

def add_item_clicked(self):
global ALLITEMS
item = "Another item B"
ALLITEMS["B"].append(item)
self.ui_listview.addItem( item )


class ExampleMain(QtGui.QWidget):

def __init__(self):
super(ExampleMain, self).__init__()
self.initUI()

def initUI(self):
# formatting
self.resize(200, 200)
self.setWindowTitle("Test")

# widgets
tab_panel = QtGui.QTabWidget()
tab_panel.addTab(ExampleA(), "Tab A")
tab_panel.addTab(ExampleB(), "Tab B")

# main layout
main_layout = QtGui.QVBoxLayout()
main_layout.addWidget(tab_panel)
main_layout.setContentsMargins(0,0,0,0)
self.setLayout(main_layout)

def closeEvent(self, event):
self.save_data()

def showEvent(self, event):
self.load_data()

def save_data(self):
print "Saving..."
global ALLITEMS
json.dump(ALLITEMS, open("Example_Data.json",'w'), indent=4)

def load_data(self):
global ALLITEMS
if os.path.exists( "Example_Data.json" ):
with open( "Example_Data.json" ) as f:
data = json.load(f)
ALLITEMS = data

# Main
# ------------------------------------------------------------------------------
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
ex = ExampleMain()
ex.show()
sys.exit(app.exec_())

最佳答案

最简单(虽然不是很有效)的方法是每次更改时从 ALLITEMS 字典更新列表小部件。所以在每次按下按钮时,您可以先更新 ALLITEMS,然后清除列表小部件的内容并根据 ALLITEMS["TabName"] 的新值重新填充它。然后在 show 事件上你可以做同样的事情 - 从文件一次加载 ALLITEMS 然后更新列表小部件。

要获得更有效的方法,请查看 Qt 模型/ View 编程 (http://doc.qt.io/qt-5/model-view-programming.html) 您可能需要将 QListWidget 替换为 QListView

关于python - 从文本文件填充 UI - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34232269/

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