首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关闭和打开来自QDialog 2的QDialog

关闭和打开来自QDialog 2的QDialog
EN

Stack Overflow用户
提问于 2022-07-11 12:21:49
回答 1查看 39关注 0票数 1

因此,我在两个不同的类中有两个QDialogs,在一个q对话框中,我有一个QTableWidget,其中包含来自MYSQL db的一些数据,我想在关闭第二个q对话框时关闭并重新打开它,所以这是我尝试过的,但是无法工作:

代码语言:javascript
运行
复制
class firstDialog(QtWidgets.QDialog):
   *all my code*
class secondDialog(QtWidgets.QDialog):
    def firstdial(self):
        self.firstdial= firstDialog()
        self.firstdial.show()
    def closeandopen(self)
        self.accept()
        firstDialog.accept()
        self.firstdial()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-12 21:14:28

实现这一目标的一种方法是在启动第二个对话框时隐藏第一个对话框,然后让第二个对话框在其closeEvent期间发出关闭信号,该信号可以连接到第一个对话框中的一个插槽,这样一旦接收到,就可以再次看到它。

我正在扩展前面一个问题中使用的例子。我包括了一些内联说明,以解释更改的位置和它们正在做什么。

代码语言:javascript
运行
复制
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

def populate_table(table):
    for i in range(10):
        table.insertRow(table.rowCount())
        for j in range(2):
            item = QTableWidgetItem(type=0)
            item.setText(f"({i}, {j})")
            table.setItem(i,j,item)

class Dialog2(QDialog):

    tableInfoChanged = pyqtSignal([int, int, str])
    closing = pyqtSignal()

    def __init__(self,parent=None):
        super().__init__(parent=parent)
        self.layout = QVBoxLayout()
        self.setLayout(self.layout)
        self.table = QTableWidget()
        self.table.setColumnCount(2)
        self.layout.addWidget(self.table)
        populate_table(self.table)
        self.table.cellChanged.connect(self.emitChangedInfo)

    def emitChangedInfo(self, row, col):
        text = self.table.item(row, col).text()
        self.tableInfoChanged.emit(row, col, text)

    def closeEvent(self, event):  # override the close event
        self.closing.emit()       # emit closing signal
        super().closeEvent(event) # let normal close event continue


class Dialog1(QDialog):
    def __init__(self,parent=None):
        super().__init__(parent=parent)
        self.layout = QVBoxLayout()
        self.setLayout(self.layout)
        self.table = QTableWidget()
        self.table.setColumnCount(2)
        self.button = QPushButton("Push to open dialog2")
        self.layout.addWidget(self.table)
        self.layout.addWidget(self.button)
        populate_table(self.table)
        self.button.clicked.connect(self.openDialog2)

    def updateTable(self, row, col, text):
        self.table.item(row,col).setText(text)

    def openDialog2(self):
        self.dialog2 = Dialog2()
        self.dialog2.tableInfoChanged.connect(self.updateTable)
        # connect to the closing signal for second dialog
        self.dialog2.closing.connect(lambda: self.setVisible(True))  
        self.setVisible(False)  # Hide the first dialog
        self.dialog2.open()     # Launch second dialog


app = QApplication(sys.argv)
window = Dialog1()
window.show()
sys.exit(app.exec_())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72938514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档