Hallo zusammen,
ich möchte heute mal einem Phänomen nachgehen, das ich bei tkinter festgestellt habe.
Erzeuge ich mit tkinter eine GUI, startet neben der GUI auch immer ein tkinter-Fenster.
Der Fenstertitel beginnt immer mit: <tk #> und einer Zahl.
Als Beispiel, würde ich gerne ein PNG-Bild hier hochladen, aber das geht hier wohl nicht.
Ich verwende Linux Kubuntu 16.04.
Dort löse ich das Problem über: Fensterregeln > Anordnung & Zugriff
Einstellung: Im Hintergrund halten > erzwingen > ja
Einstellung: Nicht in Kontrollleiste > erzwingen > ja
Was mich interessiert:
- Wieso wird zusätzlich zu der tkinter-GUI ein weiteres tkinter-Fenster geöffnet?
- Gibt es eine Lösung in tkinter, um nicht im Betriebssystem diese Einstellungen vornehmen zu müssen?
Grüße Nobuddy
Störendes tkinter-Fenster
@Nobuddy: Das sollte nicht passieren also sollte es da nichts zu lösen geben. Wenn es doch passiert, dann machst Du irgendwas falsch.
PS Imagehoster googlen, da gibt es einige, wo du Bilder hochladen und dann hier mit dem Img-Tag aus der Symbolleiste verlinken kannst (Entfernen persönlicher Daten nicht vergessen...).
Ich weiß ja jetzt nicht, wofür du es brauchst, aber vielleicht solltest Du mal einen Blick auf pyQt werfen und insbesondere auf die Möglichkeit uis mit dem Designer zusammenzuklicken und on the fly im Python-Skript zu laden.
Nur zur Veranschaulichung: http://projects.skylogic.ca/blog/how-to ... ython-3-4/
Es gibt auch Möglichkeiten eine ui-Datei direkt zu laden und nicht erst in Python-Code zu übersetzen.
Nur zur Veranschaulichung: http://projects.skylogic.ca/blog/how-to ... ython-3-4/
Es gibt auch Möglichkeiten eine ui-Datei direkt zu laden und nicht erst in Python-Code zu übersetzen.
@pixewakb, mein eigentliches Problem in diesem Thread ist gelöst!
Dein Vorschlag mit pyQt und dem Designer, werde ich mal genauer anschauen.
Bisher habe ich alles mit Tkinter erledigt, weil es einfach umzusetzen ist.
pyQt ist da schon etwas komplizierter.
Dein Vorschlag mit pyQt und dem Designer, werde ich mal genauer anschauen.
Bisher habe ich alles mit Tkinter erledigt, weil es einfach umzusetzen ist.
pyQt ist da schon etwas komplizierter.
Wenn Du mal ein, zwei Tage investiert hast, ist es m. E. einfacher und du kommst schneller zu Ergebnissen.
Habe mal mit dem Designer ein kleines Fenster erstellt und in py umgewandelt.
Fenster funktioniert, aber wie fange ich die Werte der 2 Buttons (ok / cancel) ab?
Code: Alles auswählen
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created: Wed Jun 21 15:20:50 2017
# by: PyQt5 UI code generator 5.2.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 120)
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(30, 80, 341, 32))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(30, 20, 341, 41))
self.label.setObjectName("label")
self.retranslateUi(Dialog)
self.buttonBox.accepted.connect(Dialog.accept)
self.buttonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
Dialog.setToolTip(_translate("Dialog", "<html><head/><body><p><br/></p></body></html>"))
Dialog.setWhatsThis(_translate("Dialog", "<html><head/><body><p><br/></p></body></html>"))
self.label.setText(_translate("Dialog", "<html><head/><body><p><span style=\" font-size:14pt;\">Änderung übernehmen?</span></p></body></html>"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
GUIs mache ich schon seit Jahren nicht mehr
Bei PyQt gibt es ein Konzept von Signalen und Ereignissen, wenn ich mich da richtig erinnere. Du bindest im Prinzip Signale oder Ereignisse aus dem GUI an deinen Code und legst so fest, was passiert, wenn es zu einer Benutzerinteraktion gekommen ist.
Ganz optimal ist Dein Code so übrigens nicht. Professioneller wird meines Erachtens direkt das ui-file geladen, wofür es eine eigene Funktion/Methode gibt (müsstest du mal googlen). Vorteil Deiner Methode ist, dass man auch mal sieht, was man da macht.
Hilft Dir - bezogen auf deine konkrete Frage - das weiter???
https://www.tutorialspoint.com/pyqt/pyq ... _slots.htm
Bei PyQt gibt es ein Konzept von Signalen und Ereignissen, wenn ich mich da richtig erinnere. Du bindest im Prinzip Signale oder Ereignisse aus dem GUI an deinen Code und legst so fest, was passiert, wenn es zu einer Benutzerinteraktion gekommen ist.
Ganz optimal ist Dein Code so übrigens nicht. Professioneller wird meines Erachtens direkt das ui-file geladen, wofür es eine eigene Funktion/Methode gibt (müsstest du mal googlen). Vorteil Deiner Methode ist, dass man auch mal sieht, was man da macht.
Hilft Dir - bezogen auf deine konkrete Frage - das weiter???
https://www.tutorialspoint.com/pyqt/pyq ... _slots.htm
Die Funktion/Methode scheint uic.loadUi() zu sein.
https://stackoverflow.com/questions/239 ... ython-pyqt
https://stackoverflow.com/questions/239 ... ython-pyqt
@Nobuddy: Da Du für die Standardbuttons einen gewählt hast der die `AcceptRole` hat (Ok) und einen der die `RejectRole` hat (Cancel), werden die `accepted` und `rejected`-Signale wie man im Code sieht schon mit `accept()` und `reject()` vom Dialog verbunden.
`QDialog` wiederum hat selbst `accepted` und `rejected` als Signal und ein `finished` das den Rückgabewert übermittelt.
Dieser Wert wird aber auch von `QDialog.exec_()` zurückgegeben, falls man den Dialog Modal anzeigen möchte.
`QDialog` wiederum hat selbst `accepted` und `rejected` als Signal und ein `finished` das den Rückgabewert übermittelt.
Dieser Wert wird aber auch von `QDialog.exec_()` zurückgegeben, falls man den Dialog Modal anzeigen möchte.
@pixewakb, habe den Code 1:1 aus dem Designer übernommen und dann mittels Befehl "pyuic5 -x untitled.ui -o untitled.py" umgewandelt.
Ist ja auch nur mal zu Anschauen, wie so etwas mit PyQt funktioniert. Bis man da richtig drin ist, das wird schon eine Weile dauern.
@BlackJack, Danke für den Tip!
So, bekomme ich auch eine Rückmeldung:
Danke für Eure Hilfe!
Grüße Nobuddy
Ist ja auch nur mal zu Anschauen, wie so etwas mit PyQt funktioniert. Bis man da richtig drin ist, das wird schon eine Weile dauern.
@BlackJack, Danke für den Tip!
So, bekomme ich auch eine Rückmeldung:
Code: Alles auswählen
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
result = Dialog.exec_()
print(result)
sys.exit(result)
Grüße Nobuddy