PyQT und ändern sich dynamisch, ein QMainWindow Titel
Ich ein sehr einfaches python-Skript zu Lesen, eine sqlite3-Datenbank in eine QtTableWidget.
import sqlite3 as db
from PyQt4 import QtCore, QtGui
import sys
con = db.connect('results.db', isolation_level=None)
cur = con.cursor()
cur.execute("SELECT * FROM Results")
all_data = cur.fetchall()
class UiDialog(object):
def setupUi(self, datadb):
datadb.setObjectName("Dialog")
datadb.resize(404, 304)
datadb.setWindowTitle("Database results")
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(datadb.sizePolicy().hasHeightForWidth())
datadb.setSizePolicy(sizePolicy)
datadb.setMinimumSize(QtCore.QSize(404, 304))
datadb.setMaximumSize(QtCore.QSize(404, 304))
self.table = QtGui.QTableWidget(datadb)
self.table.setGeometry(QtCore.QRect(2, 2, 400, 261))
self.table.setObjectName("table")
self.show = QtGui.QPushButton(datadb)
self.show.setGeometry(QtCore.QRect(2, 270, 400, 31))
self.show.setObjectName("show")
self.show.setText("Show results")
QtCore.QObject.connect(self.show, QtCore.SIGNAL("clicked()"), self.populate)
QtCore.QMetaObject.connectSlotsByName(datadb)
def populate(self):
self.table.setRowCount(len(all_data))
self.table.setColumnCount(4)
self.table.setHorizontalHeaderLabels(['Number', 'Keys', 'Time', 'Tries'])
for i, item in enumerate(all_data):
number = QtGui.QTableWidgetItem(str(item[0]))
keys = QtGui.QTableWidgetItem(item[1])
time = QtGui.QTableWidgetItem(str(item[2]))
tries = QtGui.QTableWidgetItem(str(item[3]))
self.table.setItem(i, 0, number)
self.table.setItem(i, 1, keys)
self.table.setItem(i, 2, time)
self.table.setItem(i, 3, tries)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main_conf = QtGui.QDialog()
ui = UiDialog()
ui.setupUi(main_conf)
main_conf.show()
ret = app.exec_()
sys.exit(ret)
Funktioniert es einwandfrei. Meine Frage ist jetzt:
Gibt es eine Möglichkeit, den Fenstertitel ändern sich dynamisch zur Laufzeit?
setWindowTitle() wird nicht aktualisiert, on-the-fly die Titelleiste, noch update() oder repaint().
Danken Ihnen sehr für Ihre wertvolle Zeit!
finde keine Lösung, aber eine änderung der
Ja, bitte poste deine Lösung.
QtCore.QObject.connect(self.show, QtCore.SIGNAL("clicked()"), self.populate)
syntax, wenn seine ok, um es zu ändern ein bisschen kann ich es posten...Ja, bitte poste deine Lösung.
InformationsquelleAutor BarnardMikey | 2015-08-18
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Andere Lösung:
Wenn Sie einen generierten code aus
.ui
- Datei, können Sie schreiben Ihre HAUPT-Code in eine andere Datei und importieren Sie einfach die generierten ui-Datei in Ihrem HAUPT-Code, so dass zukünftige änderungen wirken sich nicht auf oder ändern Sie Ihre Haupt-code... also ist die beste Lösung auf meine option wäre:Vielen Dank, nur zu schreiben, die
self.setWindowTitle()
nachdem dem Aufruf vonself.ui.setupUi()
war der trick 🙂InformationsquelleAutor PYPL
Dieser funktioniert. Aber du bist Bau dein widget in einem fremden und unbequemen Weg. Die konventionelle Lösung ist die Verwendung von Vererbung:
setupUi()
Methode.three_pineapples richtig ist. Das ist automatisch generierter code von einem Qt Designer ui-Datei. Jeder andere Vorschlag?
InformationsquelleAutor Alexander Lutsenko
selbst.ui.btn_close.geklickt.connect(self.btn_close_clicked)
def btn_close_clicked(self):
selbst.close () -
InformationsquelleAutor John Koder Kane