【发布时间】:2020-11-02 18:32:29
【问题描述】:
我正在使用 PyQt 在 Qt Designer 上设计这个东西。所以我有一个QMainWindow,用户可以从中打开一个QDialog 来输入我保存在Json 文件中的一些数据(下面的AddUser 函数)
我想要的是当单击 AddUser 按钮时,从 AddUser 函数中,如何在 MainWindow 类中定义的 Combobox 中添加新项目?
这是两个类的代码
import ui.mainwindow as MnWindow
import ui.AddUserDialog as AddUserDialog
#First GUI
class MainWindow(QMainWindow,MnWindow.Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
#Second GUI
class AddUserDialog(QDialog,AddUserDialog.Ui_Dialog):
def __init__(self,parent=None):
super(AddUserDialog,self).__init__(parent)
self.setupUi(self)
self.pushButtonAddUser.clicked.connect(self.AddUser)
def AddUser(self):
DateDeNaissance = self.dateEditDateDeNaissance.date().toString(Qt.ISODate)
DateDeSortie = self.dateEditDateDeSortie.date().toString(Qt.ISODate)
new_user = {
'firstname' : self.lineEditPrenom.text(),
'lastname' : self.lineEditNom.text(),
'DateDeNaissance' : DateDeNaissance[-2:] + DateDeNaissance[5:7] + DateDeNaissance[:4],
'LieuDeNaissance' : self.lineEditLieuNaissance.text(),
'Adresse' : self.lineEditAdresse.text(),
'Ville' : self.lineEditVille.text(),
'CodePostal' : self.lineEditCodePostal.text(),
'DateDeSortie' : DateDeSortie[-2:] + DateDeSortie[5:7] + DateDeSortie[:4],
'Heure' : str(self.timeEditSortie.time().hour()),
}
with open('TestJson.json','r') as f:
data = json.load(f)
data['users'].append(new_user)
with open('TestJson.json','w') as f:
json.dump(data,f,indent=3)
MainWindow.UserComboBox.addItem(new_user['firstname'] + ' ' + new_user['lastname'])
最后一行当然是不正确的,我该怎么做呢?
PS:我读过我需要从 MainWindow 类继承,但我一直在尝试,但没有成功。
【问题讨论】:
-
交互式对话框通常用于在对话框关闭后立即获得返回某些结果(通过接受或拒绝 它),并且在正常情况下,它们不应该能够直接与创建它们的对象进行交互。所以,最重要的问题是:您希望能够在对话框仍然打开时更改主窗口中的项目,还是希望从对话框中取回结果然后做出相应的反应?
-
@musicamante 不,主窗口中的更改是在对话框关闭后进行的,如何使用对话框结果对主窗口小部件执行操作?我是 Qt 的新手,所以我不知道是否有一种简单明了的方法可以做到这一点。谢谢,
标签: python python-3.x pyqt5 qmainwindow