__deets__ hat geschrieben: ↑Mittwoch 1. Mai 2019, 17:28
@Attalantore: nein, er wird immer erzeugt. Er wird dann nur bedingt angezeigt.
Diese Aussage hat mich etwas verwirrt, aber in deinem letzten Beitrag hast du es jetzt klargestellt. Danke.
Um die Schwierigkeit im Übungsbeispiel zu steigern, würde ich nun gerne den im Hauptfenster eingegebenen Text von einer Funktion auswerten lassen und bei erfolgreicher Auswertung einen Dialog mit dem Ergebnis anzeigen lassen. Dazu habe ich den Code entsprechend angepasst, aber bei der Verknüpfung des Rückgabewertes der Funktion `check_data()` mit der if-Bedinung in der `main()`-Funktion komme ich nicht mehr weiter.
Ich könnte zwar den Code zur Erzeugung des Dialogs in die Funktion `check_data()` integrieren, aber dann wäre Datenverarbeitung und Darstellung nicht mehr getrennt. Wie macht man das am besten?
Einzelne Schritte (zumindest habe ich es mir so gedacht):
- Text in Textfeld des `main_window`-Objekts eingeben
- Nach Eingabe auf "Absenden" im `main_window`-Objekt klicken
- Eingabe in Funktion `check_data()` auswerten, ob Daten wie gewünscht sind
- Falls ja, Eingabe in `data_dialog`-Objekt ausgeben
main.py
Code: Alles auswählen
#!/usr/bin/python3
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog, QListWidget
from PyQt5.uic import loadUi
from PyQt5.QtCore import pyqtSignal
class MainWindow(QMainWindow):
entered_text = pyqtSignal(str)
def __init__(self, parent=None):
super().__init__(parent)
loadUi("mainwindow.ui", self)
self.show()
def submit_text(self):
self.entered_text.emit(self.textEdit.toPlainText())
class DataDialog(QDialog):
def __init__(self, parent=None):
super().__init__()
self.list_widget = QListWidget(self)
self.list_widget.show()
def add_items(self, items):
self.list_widget.addItems(items)
def check_data(data_to_check=None):
print(data_to_check)
if data_to_check:
# Code zur Datenauswertung.
# Wenn Daten wie gewünscht, dann
return True
def main():
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.pushButton_submit.clicked.connect(main_window.submit_text)
main_window.entered_text.connect(lambda data=main_window.entered_text: check_data(data))
if check_data():
data_dialog = DataDialog()
data_dialog.add_items(main_window.entered_text)
data_dialog.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
mainwindow.ui
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QTextEdit" name="textEdit"/>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="pushButton_submit">
<property name="text">
<string>Absenden</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>28</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
Gruß
Atalanttore