PyQt widget neu laden oder aktualisieren
Mein problem ist, dass wenn ich einen Namen auf-widget "Form1" dieser name wird in eine Datei geschrieben. Wenn ich auf OK-Taste auf das widget "Form1" ich kann nicht sehen, die gleichen Namen auf-widget "Form2", die ich zuvor ausgewählt haben.
Das problem ist, dass das widget "Form2" ist nicht auf dem neuesten Stand. Ich versuchte, legen Sie selbst.update am Anfang auf das widget "Form2", aber es funktioniert nicht. Wie kann ich die refresh-widget "Form2" oder "neu laden" der Inhalt der Datei?
Ich habe einen einfachen code:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from functools import partial
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4 import QtGui, QtCore
from math import sqrt
from time import gmtime, strftime
class Form1(QWidget):
showForm2Signal = pyqtSignal()
def __init__(self, parent=None):
super(Form1, self).__init__(parent)
self.label = QtGui.QLabel(self)
self.label.setGeometry(0, 40, 480, 400)
self.label.move(0,40)
#Select name
self.styleTerminalSettings = QtGui.QLabel("Please select your name:", self)
self.styleTerminalSettings.move(20,40)
self.styleTerminalSettings.resize(250,30)
self.styleTerminalSettings.setStyleSheet("color: black; background-color: transparent; font-size: 12pt; font-weight: bold;")
self.comboBox = QtGui.QComboBox(self)
self.comboBox.addItem("NAME 1")
self.comboBox.addItem("NAME 2")
self.comboBox.addItem("NAME 3")
self.comboBox.addItem("NAME 4")
self.comboBox.move(20,80)
self.comboBox.resize(440,50)
self.comboBox.currentIndexChanged.connect(self.selectionchange)
#OK button
self.ok_button = QtGui.QPushButton("OK", self)
self.ok_button.resize(self.ok_button.minimumSizeHint())
self.ok_button.move(0,340)
self.ok_button.resize(480,60)
self.ok_button.setStyleSheet("color: #25373D; background-color: #71BA51; font-size: 16pt; font-weight: bold;")
layout = QVBoxLayout(self)
self.ok_button.clicked.connect(self.showForm2Signal.emit)
def selectionchange(self,i):
pos_user_name = self.comboBox.currentText()
self.users_write(pos_user_name)
#Name write to file
def users_write(self, pos_user_name):
filename = "user_name_session"
target = open(filename, 'w')
target.truncate()
target.write(pos_user_name)
target.close()
class Form2(QWidget):
def __init__(self, parent=None):
super(Form2, self).__init__(parent)
global pos_user_name
self.label = QtGui.QLabel(self)
self.label.setGeometry(0, 40, 480, 400)
self.label.move(0,40)
#Name read from file
filename = "user_name_session"
target = open(filename, "r+")
name = target.read(10);
self.styleCashRegister = QtGui.QLabel("Name:", self)
self.styleCashRegister.move(20,40)
self.styleCashRegister.resize(170,30)
self.styleCashRegister.setStyleSheet("color: black; background-color: transparent; font-size: 16pt; font-weight: bold;")
self.cashregisterid = QtGui.QLineEdit(self)
self.cashregisterid.setText(str(name))
self.cashregisterid.move(100, 40)
self.cashregisterid.resize(260,30)
self.cashregisterid.setStyleSheet("color: #25373D; font-size: 16pt; font-weight: bold;")
class MainWidget(QWidget):
def __init__(self, parent=None):
super(MainWidget, self).__init__(parent)
self.stack = QStackedWidget()
layout = QVBoxLayout(self)
layout.addWidget(self.stack)
layout.setContentsMargins(0, 0, 0, 0)
self.setGeometry(0, 0, 480, 400)
self.setWindowTitle("PYQT WIDGET TEST")
self.setStyleSheet("background-color: #E8E8E8")
self.form1 = Form1(self)
self.form2 = Form2(self)
self.stack.addWidget(self.form1)
self.stack.addWidget(self.form2)
self.form1.showForm2Signal.connect(partial(self.stack.setCurrentWidget,self.form2))
self.stack.setCurrentWidget(self.form1)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWidget()
w.show()
app.exec_()
sys.exit()
InformationsquelleAutor user3740961 | 2016-02-16
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein paar Möglichkeiten, wie Sie dies tun könnte. Das erste, was Sie brauchen, ist ein "refresh" - Funktion in form2 wird, aktualisieren Sie den text auf form2.
Die zweite Sache, die Sie brauchen, ist ein Weg zu nennen, dass
refresh
Funktion, wenn die Datei neu geschrieben wird.Könnten Sie verwenden Sie einfach das vorhandene signal, dass form1 schon strahlt zum anzeigen von form2. In Ihrem MainWidget, verbinden Sie das signal der refresh-Funktion
Was hat nicht funktioniert? Hast du eine Fehlermeldung erhalten? Ist die
refresh
Funktion nicht aufgerufen wird?Ich bekomme keinen Fehler. Getestet habe ich refresh-Funktion...ich eingefügt print("ok") und ich kann sehen, diese auf terminal. Aber ich kann nicht sehen, das widget "Form2" nur "Form1" kontinuierlich.
Waren Sie nicht zu sehen, form2 vor, es war einfach nicht updaten? Haben Sie entfernen die anderen signal-Verbindung? Sie sollten 2-signal-Anschlüsse-Einstellung des stack-widget, und einen Aufruf der refresh-Funktion.
Brendal Abel: Danke für deine Hilfe! Es funktioniert!
InformationsquelleAutor Brendan Abel