如何从对话框调用mainwindow方法

2024-04-25 00:07:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我用我的新关键字“stackoverflow”显示以下对话框:

Example Dialog

按下“hinzufügen”按钮后,将调用以下方法:

keywords = self.wort_neue_woerter.toPlainText()
try:
    with open("files/schluesselwoerter.txt", 'r') as file:
        output = file.read()
        self.keywords += output
except:
    print("Datei nicht gefunden")
with open("files/schluesselwoerter.txt", 'w') as file:
    file.write(self.keywords)
print("Ausgeführt")

每个关键字都写在“schlüsselwoerter.txt“”文件:

schluesselwoerter.txt

第一个对话框中的方法使用此文本文件填充ListWidget。在

Dialog 1

^{pr2}$

我想在按下对话框2中的按钮后立即调用Dialog 1方法populate_listWidget。我该怎么做?在

以下是完整代码:

主要班级:

import sys
import main_window
from PyQt5 import QtWidgets

class GUI(QtWidgets.QMainWindow, main_window.Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    gui = GUI()
    gui.show()
    sys.exit(app.exec_())

主窗口:

from PyQt5 import QtCore, QtGui, QtWidgets
import dialog

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.listWidget = QtWidgets.QListWidget(self.centralwidget)
        self.listWidget.setObjectName("listWidget")
        self.horizontalLayout.addWidget(self.listWidget)
        self.main_insert_btn = QtWidgets.QPushButton(self.centralwidget)
        self.main_insert_btn.setObjectName("main_insert_btn")
        self.horizontalLayout.addWidget(self.main_insert_btn)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        try:
            self.populate_list()
        except:
            print("Population failed")

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.main_insert_btn.clicked.connect(self.create_new_keywords)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.main_insert_btn.setText(_translate("MainWindow", "Insert"))

    def create_new_keywords(self):
        keyword_dialog = QtWidgets.QDialog()
        keyword_dialog.ui = dialog.Ui_Dialog()
        keyword_dialog.ui.setupUi(keyword_dialog)
        keyword_dialog.exec_()

    def populate_list(self):
        with open('schluesselwoerter.txt', 'r') as file:
            output = file.read()
            output_list = output.split(',')
            for element in output_list:
                item = QtWidgets.QListWidgetItem(element.strip())
                self.listWidget.addItem(item)

插入对话框:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.verticalLayout = QtWidgets.QVBoxLayout(Dialog)
        self.verticalLayout.setObjectName("verticalLayout")
        self.text_input = QtWidgets.QPlainTextEdit(Dialog)
        self.text_input.setObjectName("text_input")
        self.verticalLayout.addWidget(self.text_input)
        self.insert_btn = QtWidgets.QPushButton(Dialog)
        self.insert_btn.setObjectName("insert_btn")
        self.verticalLayout.addWidget(self.insert_btn)

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

        self.insert_btn.clicked.connect(self.create_new_entry)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.insert_btn.setText(_translate("Dialog", "Insert"))

    def create_new_entry(self):
        keywords = self.text_input.toPlainText()
        try:
            with open("schluesselwoerter.txt", 'r') as file:
                output = file.read()
                keywords += output
        except:
            print("Datei nicht gefunden")
        with open("schluesselwoerter.txt", 'w') as file:
            file.write(keywords)
        print("Ausgeführt")
        self.text_input.setPlainText("")

Tags: selfoutputmaindeftranslatefiledialoginsert
1条回答
网友
1楼 · 发布于 2024-04-25 00:07:10

您只需创建您的insert-dialog,同时继承这两个类(QDialog和{}),就像您在GUI-类中所做的那样:

from PyQt5 import QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        self.verticalLayout = QtWidgets.QVBoxLayout(Dialog)
        self.text_input = QtWidgets.QPlainTextEdit(Dialog)
        self.verticalLayout.addWidget(self.text_input)
        self.insert_btn = QtWidgets.QPushButton('add', Dialog)
        self.verticalLayout.addWidget(self.insert_btn)

class InsertDialog(QtWidgets.QDialog, Ui_Dialog):
    def __init__(self, parent = None):
        super(InsertDialog, self).__init__(parent)
        self.setupUi(self)
        self.insert_btn.clicked.connect(self.create_new_entry)

    def create_new_entry(self):
        keywords = self.text_input.toPlainText()
        try:
            with open("schluesselwoerter.txt", 'r') as file:
                output = file.read()
                output += (',' + keywords) # add new word to end of list
        except:
            print("File not found")
        with open("schluesselwoerter.txt", 'w') as file:
            file.write(output)
        print("done")
        self.text_input.setPlainText("")

为了提供一个最小的示例,在我编辑之后,其余代码如下所示:

^{pr2}$

旁注:我非常喜欢德语,如果你想让别人帮你,我可以建议你用英语来回答你的问题。翻译它并不费劲,尤其是当你请求帮助(免费)时。
只要记住,不是每个人都喜欢这个国家,而且这是一种更有礼貌的方式。

相关问题 更多 >