Der Einfachheit habe ich mal die Maindatei reinkopiert.
Das QLabel (self.letzter_eintrag) wird aus mehren Formularen überschrieben(aktualisiert).
Jedoch läuft letztendes alles über die Log Datei.
Macht es da Sinn, in der Log Datei eine Klasse Signale zu machen?
Code: Alles auswählen
#!/usr/bin/env python
import locale
import sys
from PyQt5.QtCore import Qt, QTimer, pyqtSlot
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QMainWindow, QApplication
from worklogapp.frm_projekt_eintragen import WindowProjektEintragen
from worklogapp.frm_barButtons import Bar_Buttons
from worklogapp.log import Log
from worklogapp.frm_container import AnimButton, AnimLabel
import qtmodern.styles
import qtmodern.windows
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
locale.setlocale(locale.LC_ALL, 'de')
super(MainWindow, self).__init__(*args, **kwargs)
self.iniSize = False
self.secondsize = False
self.top = 1
self.left = 1
self.width = 180
self.height = 80
self.width_min = self.size().width()
self.height_min = self.size().height()
self.setWindowTitle('WL-A')
self.setGeometry(self.left, self.top, self.width, self.height)
self.setMouseTracking(True)
self.bar_buttons = Bar_Buttons()
self.layout_frm = QVBoxLayout()
self.V_bar_button = QVBoxLayout()
self.layout = QHBoxLayout()
self.widget = QWidget()
self.timer_hover = QTimer()
self.frm_projekt_eintragen = WindowProjektEintragen()
self.frm_projekt_eintragen.sig_update_label.connect(self.update_textfeld_letzter_eintrag)
self.log = Log()
self.log.backup_timer()
self.log.update_label()
self.log.sig_update_label_log.connect(self.update_textfeld_from_log)
self.initUI()
def initUI(self):
# Alles Randlos setzen
self.layout_frm.setContentsMargins(2, 2, 2, 2)
self.layout_frm.setSpacing(0)
self.layout.setContentsMargins(0, 0, 0, 0)
self.layout.setSpacing(0)
self.V_bar_button.setContentsMargins(0, 0, 0, 0)
self.V_bar_button.setSpacing(0)
# Label laden letzter Eintrag
self.letzter_eintrag = AnimLabel(self.log.letzer_eintrag_auslesen().to_string())
self.letzter_eintrag.setObjectName('letzter_eintrag')
self.letzter_eintrag.setUpdatesEnabled(True)
self.letzter_eintrag.setAlignment(Qt.AlignCenter)
# Raster add alle Objekte
# self.bt_stop_anim_qlabel= AnimButton('testbutton')
self.V_bar_button.addWidget(self.bar_buttons)
#self.layout_frm.addWidget(self.bt_stop_anim_qlabel)
self.layout_frm.addWidget(self.letzter_eintrag)
self.layout_frm.addWidget(self.frm_projekt_eintragen)
# Einzelen Layout zur Main Layaut hinzufügen
self.layout.addLayout(self.V_bar_button)
self.layout.addLayout(self.layout_frm)
# Layout auf Main legen und einpassen
self.widget.setLayout(self.layout)
self.setCentralWidget(self.widget)
# Widget deaktivieren für Defaultgrösse
self.frm_projekt_eintragen.setVisible(False)
self.bar_buttons.setVisible(False)
def enterEvent(self, event):
# Maus auf dem Label(Main) "letzter_eintrag"
self.timer_hover.stop()
self.bar_buttons.setVisible(True)
self.frm_projekt_eintragen.setVisible(True)
self.update()
if not self.iniSize:
self.width_max = self.size().width()
self.height_max = self.size().height()
self.iniSize = True
self.secondsize = True
if self.secondsize:
self.parent.setMinimumSize(self.width_max, self.height_max)
self.parent.resize(self.width_max, self.height_max)
def leaveEvent(self, event):
# warten bis das Fenster verkleinert werden soll
self.timer_hover.start(5000)
self.timer_hover.timeout.connect(self.end_hoverd)
def end_hoverd(self):
# Fenster verkleinert
self.timer_hover.stop()
self.frm_projekt_eintragen.setVisible(False)
self.bar_buttons.setVisible(False)
self.update()
self.parent.setMinimumSize(self.width, self.height + 7)
self.parent.resize(self.width, self.height + 7)
self.parent.update()
def setparent(self,parent):
self.parent = parent
def update_textfeld_letzter_eintrag(self):
self.letzter_eintrag.setText(self.log.letzer_eintrag_auslesen().to_string())
self.setStyleSheet('')
@pyqtSlot(bool, str)
def update_textfeld_from_log(self, status, meldung):
if status:
self.letzter_eintrag.setText(meldung)
self.setStyleSheet("""QLabel#letzter_eintrag{color: green;}""")
else:
self.letzter_eintrag.setText(meldung)
self.setStyleSheet("""QLabel#letzter_eintrag{background-color: red;}""")
self.timer_backup = QTimer()
self.timer_backup.timeout.connect(self.update_textfeld_letzter_eintrag)
self.timer_backup.start(3000)
def main():
app = QApplication(sys.argv)
qtmodern.styles.dark(app)
window = qtmodern.windows.ModernWindow(MainWindow())
window.w.setparent(window)
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
"""
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
"""
die Logdatei ist auf das Minimum reduziert.
Code: Alles auswählen
class Log(QObject):
sig_update_label_log = pyqtSignal(bool, str)
def __init__(self, *args, **kwargs):
super(Log, self).__init__(*args, **kwargs)
self.log_entry = Log_entry()
...
def irgendEineFunktion(self):
...
self.update_label()
def update_label(self):
self.sig_update_label_log.emit(True, 'aber jetzt')