Seite 1 von 1
Störendes tkinter-Fenster
Verfasst: Samstag 17. Juni 2017, 12:09
von Nobuddy
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
Re: Störendes tkinter-Fenster
Verfasst: Samstag 17. Juni 2017, 12:52
von BlackJack
@Nobuddy: Das sollte nicht passieren also sollte es da nichts zu lösen geben. Wenn es doch passiert, dann machst Du irgendwas falsch.
Re: Störendes tkinter-Fenster
Verfasst: Samstag 17. Juni 2017, 17:22
von Nobuddy
@BlackJack, hast recht, da hat sich ein kleiner Fehler in einem Modul eingeschlichen, das ich erst jetzt bemerkt habe.
Hier habe ich tk.Tk() aufgerufen, aber am Ende das destroy() vergessen ...

Re: Störendes tkinter-Fenster
Verfasst: Samstag 17. Juni 2017, 22:39
von pixewakb
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...).
Re: Störendes tkinter-Fenster
Verfasst: Sonntag 18. Juni 2017, 11:43
von Nobuddy
@pixewakb, Danke für den Tip!
Hier das Bild.

Re: Störendes tkinter-Fenster
Verfasst: Sonntag 18. Juni 2017, 18:17
von pixewakb
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.
Re: Störendes tkinter-Fenster
Verfasst: Montag 19. Juni 2017, 08:46
von Nobuddy
@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.
Re: Störendes tkinter-Fenster
Verfasst: Montag 19. Juni 2017, 09:01
von pixewakb
Wenn Du mal ein, zwei Tage investiert hast, ist es m. E. einfacher und du kommst schneller zu Ergebnissen.
Re: Störendes tkinter-Fenster
Verfasst: Mittwoch 21. Juni 2017, 14:39
von Nobuddy
Habe mal mit dem Designer ein kleines Fenster erstellt und in py umgewandelt.
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_())
Fenster funktioniert, aber wie fange ich die Werte der 2 Buttons (ok / cancel) ab?
Re: Störendes tkinter-Fenster
Verfasst: Mittwoch 21. Juni 2017, 14:54
von pixewakb
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
Re: Störendes tkinter-Fenster
Verfasst: Mittwoch 21. Juni 2017, 14:57
von pixewakb
Re: Störendes tkinter-Fenster
Verfasst: Mittwoch 21. Juni 2017, 14:59
von BlackJack
@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.
Re: Störendes tkinter-Fenster
Verfasst: Mittwoch 21. Juni 2017, 15:33
von Nobuddy
@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:
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)
Danke für Eure Hilfe!
Grüße Nobuddy