Reputation: 245
I have the following dialog with my new keyword "stackoverflow":
After pressing the "hinzufügen" button the following method is called:
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")
Every keyword is written in the "schlüsselwoerter.txt" file:
The method from the first dialog uses this textfile to populate the ListWidget.
with open('files/schluesselwoerter.txt', 'r') as file:
output = file.read()
output_list = output.split(',')
for element in output_list:
item = QtWidgets.QListWidgetItem(element.strip())
self.wort_uebersicht.addItem(item)
I want to call the Dialog 1 method populate_listWidget
right after pressing on the button in Dialog 2. How can i do this?
Here is the full code:
Main Class:
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_())
Main_Window:
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)
Insert Dialog:
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("")
Upvotes: 0
Views: 1400
Reputation: 1994
You simply want to create your insert-dialog
while inheriting from both classes (QDialog
and Ui_Dialog
), like you did in your GUI
-class :
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("")
To provide a minimal example, the rest of your code looks like this, after my edits:
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
self.listWidget = QtWidgets.QListWidget(self.centralwidget)
self.horizontalLayout.addWidget(self.listWidget)
self.main_insert_btn = QtWidgets.QPushButton('Insert', self.centralwidget)
self.horizontalLayout.addWidget(self.main_insert_btn)
MainWindow.setCentralWidget(self.centralwidget)
class GUI(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(GUI, self).__init__()
self.setupUi(self)
self.populate_list()
self.main_insert_btn.clicked.connect(self.create_new_keywords) # do this outside
def create_new_keywords(self):
insert_dialog = InsertDialog(self)
insert_dialog.exec()
self.populate_list() # refresh list, after you are done
def populate_list(self):
try:
with open('schluesselwoerter.txt', 'r') as file:
output = file.read()
output_list = output.split(',')
self.listWidget.clear() # to prevent double entries
for element in output_list:
item = QtWidgets.QListWidgetItem(element.strip())
self.listWidget.addItem(item)
except:
print("Population failed")
if __name__ == '__main__':
[...]
Sidenote: As much I love the german language - I just can recommend you to provide your entire question in english if you want people to help you. It's not to much effort to translate it, especially when you are requesting help (for free!).
Simply have in mind that not everyone likes the country - also it's way more polite.
Upvotes: 1