pyqt: Wie dynamisch zu aktualisieren, die widget-Eigenschaft auf die äußere variable Wert ändern?
Habe ich class Ui_MainWindow(object)
erstellt ein Fenster mit einem Fortschrittsbalken und class OtherClass(object)
enthält Verfahren, bei denen die lokale int-variable Schritten im Zyklus.
Wie die Verbindung von lokalen Variablen Wert zu ändern, um progres bar-Wert ändern?
mainGUI.py
import sys
from PyQt4.uic.Compiler.qtproxies import QtGui
from PyQt4 import QtGui
from Ui_MainWindow import Ui_MainWindow
def main():
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Ui_MainWindow.py
from PyQt4 import QtCore, QtGui
from MainGui.OtherClass import OtherClass
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_MainWindow(object):
def myButtonSlot(self):
objVar=OtherClass()
objVar.method()
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(389, 332)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.pushButton.clicked.connect(self.myButtonSlot)
self.verticalLayout.addWidget(self.pushButton)
self.progressBar = QtGui.QProgressBar(self.centralwidget)
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName(_fromUtf8("progressBar"))
self.verticalLayout.addWidget(self.progressBar)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 389, 21))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
OtherClass.py
class OtherClass(object):
def method(self):
for i in range(100): # i want to connect variable i to progress bar value
print i
for j in range(100500):
pass
Zeig bitte den code, den Sie bisher haben.
InformationsquelleAutor Sashko Lykhenko | 2014-01-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie re-organisieren Sie Ihren code ein wenig.
Erstens sollten Sie nie Bearbeiten Sie den code in das UI-Modul generiert
pyuic
. Stattdessen importieren Sie Sie in Ihrer main-Modul und implementieren die Anwendungslogik es.Zweitens, erstellen Sie eine main-Fenster-Klasse in der main-Modul, und alles tun, das setup in seiner
__init__
Methode.Einen Weg, um Ihr problem zu lösen der Verbindung der loop-variable der Fortschritt-bar zu machen
OtherClass
eine Unterklasse vonQObject
und emittieren eine benutzerdefinierte signal:Mit, Sie würden dann bewegen Sie den setup für
pushButton
und seine slot "mainGUI.py" und re-generieren "Ui_MainWindow.py" mitpyuic
. Ein slot würde dann Hinzugefügt werden, behandeln Sie die benutzerdefiniertevalueChanged
signal, das aktualisieren würde, der Fortschrittsbalken und auch die Bearbeitung anstehende GUI-Ereignissen.So "mainGUI.py" würde am Ende der Suche etwas wie dieses:
InformationsquelleAutor ekhumoro
Folgende post hat eine version, Schritten die Fortschritt-bar 10% jedes mal, wenn Sie die Taste drücken. Und eine version, die mit einem timer, erhöht sich der Fortschrittsbalken. (Ich bin gerade im Prozess des Lernens selbst)
In Qt Designer, fügen Sie einen Fortschrittsbalken und einer Schaltfläche. Klicken Sie auf "Bearbeiten" - Menü Signale/Slots", ziehen Sie eine Linie von der Taste, um irgendwo in das Fenster und, wenn Sie die Taste 'gedrückt()' fügen Sie ein Ablagefach(oder signal??) genannt 'button_pressed()' (verwenden Sie die Schaltfläche+, um diese). Wenn Sie dies getan haben, ist die Schaltfläche OK abgeblendet ist - wählen Sie den slot aus, und drücken Sie OK.
Speichern Sie die Datei ui_MainWindow.ui (Hinweis: die Hauptstädte sorgfältig).
Konvertieren in eine py Datei mit der batch-Datei >
Diese Datei sollte ungefähr so Aussehen....(Sie brauchen nicht, diese zu Bearbeiten).
Erstellen 'program.py' - Datei. Dies ist die Datei, die Sie ausführen...
Nun dies ist, wo die guten Sachen passiert, wenn Sie eine Unterklasse der mainwindow. Nennen Sie diese Datei 'mainWindow.py'. Vorsichtig mit den marktkapitalisierungen.
Gibt es ein gutes tutorial hier, die ich verwendet, um zu schaffen eine Alternative 'mainWindow.py' die mit einem timer, erhöht sich der Fortschrittsbalken. Es blockiert nicht den code mit einer Schleife mit sleep oder durch eine CPU-intensive Schleife. Ich verstehe nicht, multithreading, multi-Prozessor-Optionen noch zu kommentieren, die diese benutzen.
InformationsquelleAutor Ninga
Müssen Sie ein signal-und slot - ...und multiprocessing oder multithreading.
Es ist ein gutes Beispiel dafür, dass insbesondere führt Sie durch die Statusanzeige:
ZetCode Fortschrittsbalken
Auch, Frage beantwortet wurde hier vor:
ALSO Progress Bar
InformationsquelleAutor catwalker333