您好我正在使用python开发一个应用程序,我的问题是我正在保存一个json文件,我在一个Dialog中的QlistWidget中调用它
[ { "title":"El titulo", "enabled":true, "path":"path", "id":"5" }, { "title":"El titulo 2", "enabled":true, "path":"path", "id":"555" }, { "title":"El recontra titulo", "enabled":false, "path":"path", "id":"5555" }, { "title":"El titulo", "enabled":true, "path":"path", "id":"5" } ]
这里我运行程序,我正确读取数据,当我进入对话框时,我在QlistWidget中显示它们
问题是当我更新json时添加更多项目,我关闭对话框并返回打开但列表未更新
这里我留下了我的代码
import sys
import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog, QLabel, QAction, QMessageBox
from PyQt5 import uic
from PyQt5.QtGui import QIcon
import modules.db as DB
#DB = DB.DB()
#DB.jsonOpen()
#class Dialogo Items
class Dialogo(QDialog):
def __init__(self, item):
QDialog.__init__(self)
uic.loadUi("menu/" + item + ".ui", self)
if item == 'addItems':
items = DB.jsonOpen('items')
for p in items:
self.listitems.addItem(p['title'])
self.listitems.repaint()
self.saveitem.clicked.connect(self.save_items)
self.cancelbtn.clicked.connect(self.close_dialog)
def save_items(self):
data = DB.jsonOpen('items')
title = self.title.text()
id = self.id.text()
if self.status.isChecked():
enabled = True
else: enabled = False
data.append({
'id': id,
'title': title,
'path': 'path',
'enabled': enabled
})
DB.jsonSave(data, 'items')
self.title.setText("")
self.id.setText("")
self.status.setChecked(False)
def close_dialog(self):
self.hide()
#class heredada de QMainWindow (consturctor de ventanas) principal
class ventana(QMainWindow):
#metodo constructor
def __init__(self):
#Iniciar el objeto QMainWindow
QMainWindow.__init__(self)
#cargar la configuracion de archivo .ui
uic.loadUi("app.ui", self)
#//// Barra de menu y acciones ////#
#Onjeto menuBar
menu = self.menuBar()
#Menu Padre Inicio
menu_inicio = menu.addMenu("&Inicio")
menu_inicio_items = QAction(QIcon("icons/add.png"), "&Agregar Items", self)
menu_inicio_items.setShortcut("Ctrl+i") #atajo de teclado
self.DialogoItems = Dialogo('addItems'); # instanciamos la clase Dialogo Items
menu_inicio_items.triggered.connect(self.OpenDialogItems) #lanzados el dialogo item desde el menu items
menu_inicio.addAction(menu_inicio_items)
#Menu Configuracon
menu_conf = menu.addMenu("&Configuración")
#configuracion general
menu_conf_general = QAction(QIcon("icons/setting.png"), "&General", self)
self.DialogConfGeneral = Dialogo('confGeneral')
menu_conf_general.triggered.connect(self.OpenDialogConfGeneral) # lanazmos la configuracion general
menu_conf.addAction(menu_conf_general)
#configuracion servidores
menu_conf_servers = QAction(QIcon("icons/earth.png"), "&Servidores", self)
menu_conf_servers.setShortcut("Ctrl+h")
self.DialogConfServer = Dialogo('confServers')
menu_conf_servers.triggered.connect(self.OpenDialogConfServers)
menu_conf.addAction(menu_conf_servers)
#Abrir dialog Agregar Items
def OpenDialogItems(self):
self.DialogoItems.exec_()
#Abrir dialog Configuracion general
def OpenDialogConfGeneral(self):
self.DialogConfGeneral.exec_()
#Abrir dialog Configuracion Servidores
def OpenDialogConfServers(self):
self.DialogConfServer.exec_()
#instancia para iniciar una aplicacion
app = QApplication(sys.argv)
#app.setQuitOnLastWindowClosed(False)
#crear un objeto de la clase ventana
_ventana = ventana()
#mostrar ventana
_ventana.show()
app.exec_()
保存和阅读功能完美运行,两者的代码
import os
import json
def jsonSave(data, file):
with open("data/"+file+".json", "w") as outfile:
json.dump(data, outfile)
def jsonOpen(file):
if os.path.exists('data/'+file+'.json') == True:
with open("data/"+file+".json", 'r') as json_file:
data = json.load(json_file)
else:
data = {}
data = []
return data
我正在使用 - python 3 -pyQt5
答案 0 :(得分:0)
问题是由于数据加载仅在构造函数中给出,一旦数据未更新,因为没有完成新的补充,必须要做的是创建{{1}的方法必须在必要时重新加载或直接将新项添加到QListWidget
,鉴于上述情况,我已实现以下代码:
QListWidget
我还建议如果数据量很大,将它保存在json中是不合适的,因为它会在读取和写入数据时看到很大的延迟,这些情况的适当之处是使用数据库,例如使用sqlite。