【问题标题】:How to open a QTableView from a QDialog如何从 QDialog 打开 QTableView
【发布时间】:2019-06-27 13:33:32
【问题描述】:

我有一个显示登录表单的 QDialog。当用户输入详细信息并单击“确定”按钮时,我想关闭 QDialog 并打开一个 QTableView,其中包含用户输入的登录详细信息。

我试图将我的确定按钮连接到关闭我的 QDialog 并显示 QTableView 的函数,但我的 QTableView 出现半秒并且程序以“进程完成,退出代码 0”结束

谢谢!

    class TableViewGUI(QAbstractTableModel):
    def __init__(self, user_id, mdp, profile):
    QAbstractTableModel.__init__(self)
    [...]

    class Dialog(QDialog):
    def __init__(self, parent=None):
         super(Dialog, self).__init__(parent)
         [...]

    self.button.accepted.connect(self.openTableView)

    def openTableView(self):
         #data input by the user in the QDialog form
         id = self.input_id.text()
         password = self.input_password.text()
         profile = str(self.comboBox_profile.currentText())

         model = TableViewGUI(id, password, profile)
         view = QTableView()
         view.setModel(model)
         self.close() #Close the QDialog
         view.show() #Open the QTableView

if __name__ == '__main__':
     app = QApplication(sys.argv)
     dialog = Dialog()
     dialog.show()
     sys.exit(app.exec_())

【问题讨论】:

  • 好吧,你的问题是你没有一个结构合理的程序(你提供的这个 sn-p 不能完全发挥作用,所以用它来尝试帮助你几乎没用)。您需要的是处理 ApplicationThread 的 Main (您拥有)并调用 MainGUI 来处理主 GUI 管理器,在您的情况下甚至不是 GUI,它只会显示登录对话框窗口从中获取结果,然后显示 QTreeView Dialog 窗口
  • 谢谢丹尼斯,你的意思是我应该从我的主函数中检索我的登录详细信息,从中创建 QTableView 并关闭 QDIalog 吗?如果我从 QDialog 类之外进行操作,问题将是如何在 userclick 上启动 QTableView
  • 我在提供的代码中到底做错了什么?谢谢
  • 不能完全说因为你没有包含足够的代码来运行它——很多缺失的元素。例如:它引用了一个您不提供的按钮,TableViewGUI 不做任何事情(打印语句可能就足够了)或者您可以接受@GordonAitchJay 的建议,但是我强烈建议您这样做,而不是像它那样延续您当前的设计结构不正确

标签: python pyqt5 qtableview qdialog


【解决方案1】:

openTableView 方法一结束,model 和 view 对象就会被销毁,因为它们只在方法的范围内。在它们前面附加self.,如下所示:

    def openTableView(self):
         #data input by the user in the QDialog form
         id = self.input_id.text()
         password = self.input_password.text()
         profile = str(self.comboBox_profile.currentText())

         self.model = TableViewGUI(id, password, profile)
         self.view = QTableView()
         self.view.setModel(self.model)
         self.close() #Close the QDialog
         self.view.show() #Open the QTableView

【讨论】:

猜你喜欢
  • 2014-04-08
  • 2017-11-24
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多