Seite 1 von 1
Python + Qt4 - MainWindow neu laden (Refresh)
Verfasst: Donnerstag 6. Mai 2010, 16:48
von PreludeBA4
Hi Leute.
Ich würde gern wissen, ob es eine Möglichkeit gibt ein Qt-Fenster in Python zu "aktualisieren".
Warum?:
Ich habe mir ein Tool gebastelt und in den Einstellungen kann man zB. sagen, dass die ToolBar Ein- oder Ausgeschaltet werden soll oder welche Symbole darauf angezeigt werden sollen. Wenn man dann auf "Anwenden" oder "Ok" klickt, dann soll das Hauptfenster die Änderungen sofort und ohne Neustart des Programms ausführen. Gibt es da eine Möglichkeit und wenn ja wie?!
MFG Ronny
Verfasst: Donnerstag 6. Mai 2010, 17:46
von ichisich
Also in einem Menu da wo ich Einstetllungen vermuten würde (so ganz klar wird das ja aus deiner Beschreibung nicht) benutzt man QActions, Symbole in einer ToolBar sind quasi auch QActions, noch besser, es soll und kann die selbe QActions sein. Das hat zur Folge klick ich die eine, reagiert die andere QAction umgehend bis sofort ...
Wenn das dein Problem nicht abdeckt, wäre ein bisschen Code von deinem Tool ne super Sache ....
Verfasst: Freitag 7. Mai 2010, 14:39
von PreludeBA4
Hi
ich hab hier mal 2 Screenshots gemacht + Codeauszüge - Hoffe die reichen und sind Aussagekräftig genug. Wenn nicht, kann ich den rest gern noch posten.
MainWindow:
Code: Alles auswählen
...
# Bibliotheken importieren
import sys, os, time, threading, re, codecs
from PyQt4 import QtGui , QtCore, uic
from string import Template
# Optionen aus Datei laden
from clsOptions import clsOptions
clsOptions = clsOptions()
watchdog_options = clsOptions.funcReadOptionsFromFile(os.getcwd()+"/option.txt")
...
class clsWatchdogTool(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
# Lädt das Interface
uic.loadUi("watchdog_tool.ui", self)
...
# Öffnen des Einstellungsfensters
self.connect(self.action_Einstellungen, QtCore.SIGNAL('triggered()'), self.slotSetup)
...
# Definition zum laden des Einstellungsfensters
def slotSetup(self):
setup = clsWatchdogSetup()
self.connect(setup, QtCore.SIGNAL('signalSpeichern'), self.funcArbeitsverzeichnisProof)
setup.exec_()
...
Einstellungen:
Code: Alles auswählen
class clsWatchdogSetup(QtGui.QDialog):
def __init__(self):
QtGui.QDialog.__init__(self)
# Lädt das Interface
uic.loadUi("watchdog_setup.ui", self)
self.connect(self.BeendenButton, QtCore.SIGNAL("clicked()"), self.funcBeenden)
self.connect(self.OKButton, QtCore.SIGNAL("clicked()"), self.funcSaveAndExit)
self.connect(self.AnwendenButton, QtCore.SIGNAL("clicked()"), self.funcSave)
self.lineAVFile.setText(arbeitsverzeichnis)
if watchdog_options["toolbar"]=="1":
self.groupBoxToolBar.setChecked(1)
else:
self.groupBoxToolBar.setChecked(0)
if watchdog_options["toolbar_option"]=="1":
self.ToolBarSetup.setCheckState(True)
else:
self.ToolBarSetup.setCheckState(False)
...
def funcSaveAndExit(self):
self.funcSave()
self.accept()
def funcSave(self):
...
#clsWatchdogTool().funcArbeitsverzeichnisProof()
self.emit(QtCore.SIGNAL('signalSpeichern'), arbeitsverzeichnis)
#self.accept()
Wenn man jetzt im Einstellungsfenster zB. die Toolbar abschaltet oder sagt, dass zu den Icons auch Text angezeigt werden soll und dann auf "Anwenden" bzw. "OK" klickt, dann soll die Änderung sofort sichtbar sein also die Toolbar soll zB. sofort weg sein und nicht erst, nach dem nächsten Neustart wenn das GUI ja neu geladen wird...
Das ist jetzt auch nicht nur auf die Toolbar bezogen (für den Fall, dass da einer her kommt und sagt "Wozu brauchste das" oder so), da ich generell wissen würde wie das Funktioniert aber hier hab ich eben ein Beispiel, wo ich das benötige.
Verfasst: Freitag 7. Mai 2010, 20:31
von philistion
Re: Python + Qt4 - MainWindow neu laden (Refresh)
Verfasst: Montag 10. Mai 2010, 08:28
von PreludeBA4
Hallo und danke erst mal für die Antwort.
So wie ich das interpretiere geht es bei deinen Links darum, Sachen ein- und auszublenden?!
Wie ich aber oben geschrieben habe, geht es mir ja nicht nur darum, Sachen ein- und auszublenden sondern generell, dass Einstellungen sofort wirksam werden.
Oder hab ich da was falsch verstanden?!
Re: Python + Qt4 - MainWindow neu laden (Refresh)
Verfasst: Montag 10. Mai 2010, 10:15
von Hyperion
Ich kapiere das Problem noch nicht ganz. Ich hätte nach den bisherigen Posts einfach mal auf setEnabled() verwiesen...
Wo liegt denn das wirkliche Problem? Kannst Du das evtl. noch einmal anhand eines minimalen, lauffähigen Beispiels erläutern?
Re: Python + Qt4 - MainWindow neu laden (Refresh)
Verfasst: Montag 10. Mai 2010, 12:35
von ichisich
Also wenn ich das richtig verstehe willst Du doch einfach nur CheckBoxen aus deiner
clsWatchdogSetup() Klasse mit den Actions in deinem MainWindow verbinden oder !?
Das zu gibts ja Signale und Slots die Du ja mehrfach verwendest.
Ansonsten verteh ich auch nicht ganz dein Problem.
Gruß
Re: Python + Qt4 - MainWindow neu laden (Refresh)
Verfasst: Montag 10. Mai 2010, 14:57
von PreludeBA4
Also ich versuch das nochmal zu erklären:
Ich habe Ein Hauptfenster.
In diesem Hauptfenster gehe ich auf Datei -> Einstellungen.
Es öffnet sich das Einstellungsfenster
Hier kann ich sagen die Toolbar soll ein-/ausgeschaltet sein oder es soll ein Button auf der ToolBar angezeigt werden
dann klicke ich auf den OK button und das Einstellungsfenster schließt sich.
Nun habe ich wieder Blick auf das Hauptfenster und die Änderung, die ich haben wollte, tritt sofort ein sprich die Toolbar wird ein-/ausgeblendet oder ein Button auf der Toolbar wird ein-/ausgeblendet
Das soll aber nur als Beispiel dienen weil ich generell wissen will, wie so was Funktioniert um das evtl. auf andere Projekte zu übertragen. Als dummes Beispiel zB. Wenn ich die Farbe des Hauptfensters änder will oder die Schriftart oder die Schriftgröße oder Textfelder ein-/ausblenden lassen will etc.
Oder vielleicht noch ein Beispiel ich ändere im Einstellungsfenster die Sprache von Deutsch auf Englisch, klicke auf OK und das Hauptfenster springt sofort von Deutsch auf Englisch...
Ich hoffe jetzt konnte ich es verständlich rüber bringen :-/
Re: Python + Qt4 - MainWindow neu laden (Refresh)
Verfasst: Montag 10. Mai 2010, 15:33
von ichisich
Woher weiß denn deine Toolbar was sie beim Starten machen soll ?
Warum kann sie diese Info nicht erneut abfragen wenn Du in den Einstellungen was änderst ?
Das würde heißen wenn Du in den Einstellungen an einer der Checkboxen was änderst wird ein Signal emited das die Funktion (den Slot) aufruft um diese Infos erneut abzufragen und die Toolbar konfiguriert sich dann dem entsprechend neu. Dazu mußt Du die Werte halt auch wegschreiben. Irgendwas machst du ja mit
um in Setup an deine Info wie die CheckBoxen konfiguriert werden sollen zu kommen.
Die Stellen solltest Du eben auch beschreiben und dann von der ToolBar neu lesen lassen.
Da hinter
aber ein File zu sein scheint schau dir mal QSettings an das nimmt dir viel von dem Lese und Schreibkram ab.
Hoffe ich hab ich einigermaßen verständlich ausgedrückt.
Gruß
Re: Python + Qt4 - MainWindow neu laden (Refresh)
Verfasst: Montag 10. Mai 2010, 19:01
von philistion
Warum übergibst du statt dem ganzen Emit-Kram nicht einfach dem Konstruktor von clsWatchdogSetup das Handle der Toolbar und veränderst dann die notwendigen Einstellungen direkt in deiner funcSave() ?
Re: Python + Qt4 - MainWindow neu laden (Refresh)
Verfasst: Dienstag 11. Mai 2010, 09:58
von PreludeBA4
ichisich hat geschrieben:Woher weiß denn deine Toolbar was sie beim Starten machen soll ?
Warum kann sie diese Info nicht erneut abfragen wenn Du in den Einstellungen was änderst ?
Die Infos bekommt sie, wie du schon richtig erkannt hast, aus einer Setup-Datei.
Ich weis eben nicht, wie man das Hauptfenster "aktualisieren" kann, da dass ja offen bleibt. Aber du hast mir glaub ich gerade einen Denkanstoß gegeben, den ich mal eben probiere
philistion hat geschrieben:Warum übergibst du statt dem ganzen Emit-Kram nicht einfach dem Konstruktor von clsWatchdogSetup das Handle der Toolbar und veränderst dann die notwendigen Einstellungen direkt in deiner funcSave() ?
Werd mal gucken wie das funzt. Kann mir leider nur schwer was selber beibringen... Etwas erklärt zu bekommen fällt mir einfacher.
Aber Danke
Re: Python + Qt4 - MainWindow neu laden (Refresh)
Verfasst: Dienstag 11. Mai 2010, 10:21
von Hyperion
PreludeBA4 hat geschrieben:ichisich hat geschrieben:Woher weiß denn deine Toolbar was sie beim Starten machen soll ?
Warum kann sie diese Info nicht erneut abfragen wenn Du in den Einstellungen was änderst ?
Die Infos bekommt sie, wie du schon richtig erkannt hast, aus einer Setup-Datei.
Ich weis eben nicht, wie man das Hauptfenster "aktualisieren" kann, da dass ja offen bleibt. Aber du hast mir glaub ich gerade einen Denkanstoß gegeben, den ich mal eben probiere
Ja, aber dort werden die Daten ja über irgend welche Setter-Methoden gesetzt. Diese kannst Du doch auch unabhängig von einer Config-Datei aufrufen. Wenn der Dialog sauber aufgerufen wird, solltest Du an den parent (Das Hauptfenster) herankommen und dort die vorhandenen Objekte beeinflussen können. Das kannst Du dann direkt aus dem slot, der den OK-Status abfängt heraus realisieren.
Re: Python + Qt4 - MainWindow neu laden (Refresh)
Verfasst: Dienstag 11. Mai 2010, 10:30
von PreludeBA4
Kann mir da mal jemand nen Beispiel oder so zeigen?!
Anhand von Beispiel-Codes versteh ich so was egtl. meist recht schnell.
Das is mir grad irgendwie zu viel Input.

Bin leider noch nicht so bewandert in python. Hab erst vor 5 Monaten damit angefangen. Und gute deutsche Tuts etc. findet man leider nur wenige

Re: Python + Qt4 - MainWindow neu laden (Refresh)
Verfasst: Dienstag 11. Mai 2010, 11:13
von PreludeBA4
Also das mit der ToolBar hab ich jetzt über einem großen Umweg irgendwie hin bekommen. Aber das is jetzt so richtig "Russisch" programmiert
Es wird beim "klick" auf "ok" die ToolBar ausgeblendet über "removeToolBar" und dann neu geladen.
Werd mir mal die anderen Sachen, die hier gepostet wurde, näher angucken, wenn ich Zeit habe.
Danke nochmal an alle.