Seite 1 von 1
Python3 und tkinter
Verfasst: Dienstag 25. Januar 2011, 15:44
von Ghillie_Suit
Hallo, ich habe ein Programm mit grafischer benutzeroberfläche geschrieben, nur wenn ich es ausführen will, kommt nur ein
schwarzes Befehlsfenster das sofort wieder verschwindet aber nicht das programm.
Hier ist der code:
Code: Alles auswählen
import tkinter, sys, webbrowser
def internet():
webbrowser.open("www.google.de")
True
def end():
sys.exit(0)
main=tkinter.Tk()
lb=tkinter.Label(main, text="Bitte Eingabe!")
lb.pack()
bend=tkinter.Button(main, text="Auf Wiedersehen", command=end)
bend.pack
binternet=tkinter.Button(main,text="Ich will ins Internet!",command=internet)
binternet.pack
Re: Python3 und tkinter
Verfasst: Dienstag 25. Januar 2011, 16:18
von Xynon1
1. Deine "pack"-Methoden solltest du auch aufrufen, da fehlen die Klammern.
2. Hast du keine mainloop, also häng mal unten an dein Programm "main.mainloop()" ran.
3. True oben ist unötig
4. sys.exit(0) ist Fehl am Platz, hier durch "main.destroy()" ersetzen.
5. imports von verschiedenen Modulen immer untereinander schreiben
Re: Python3 und tkinter
Verfasst: Sonntag 6. Februar 2011, 15:15
von daemonTutorials
Da muss ich Xynon1 recht geben, obwohl der mir heute auf den Keks geht

!
Und die Funktion end() ist überflüssig, benutze stattdessen in der Buttondeklaration "command=main.destroy()" ! Damit hat Xynon1 mich auch genervt!
Soll das Programm nur Google öffnen? Wie wäre es mit dem modul os!
Code: Alles auswählen
import os
url="http://google.de"
def main():
os.cmd("firefox "+url)
main()
Und zur Übersichtlichkeit rate ich dir zwischen [variable]= und =[deklaration] ein Leerzeichen zu machen, also:
Code: Alles auswählen
#WRONG
lb=tkinter.Button(main, text="fail")
#GOOD
lb = tkinter.Button(main, text="hello")
Dadurch entstehen zwar mehr Bytes auf der Festplatte, aber das Programm ist leichter zu lesen. Sieh mal hier:
Code: Alles auswählen
#imports
import socket
#connection details
network="irc.freenode.net"
port=6667
#connect
try:
irc=socket.socket(socket.AF_INET)
catch:
print("Fehler bei der Verbindung")
#datatransfer
irc.send("NICK guest4675\r\n")
Besser:
Code: Alles auswählen
#Imports
import socket
#Connection details
network = "irc.freenode.net"
port = 6667
#Connect
try:
irc = socket.socket(socket.AF_INET)
catch:
print("Fehler bei der Verbindung")
#Datentransfer
irc.send("NICK guest4675\r\n")
Das sieht doch viel besser aus, und auch die Kommentare sind übersichtlich! Da hat man auch Bock den Code zu lesen.
Aber ist ja deine Entscheidung. Viel Spass noch in deinem kurzen aber spannenden Programmiererdasein!
Re: Python3 und tkinter
Verfasst: Sonntag 6. Februar 2011, 15:39
von cofi
@daemonTutorials: Sag mal: In welcher Sprache programmierst du denn? In Python gibt es jedenfalls weder `os.cmd` noch eine `catch` clause.
Dein "Tipp" `webbrowser` zu ersetzen ist schlecht und nicht aequivalent zum Code des OP.
Bytes sind nun wirklich kein Argument gegen Whitespace, nicht bei Centpreisen pro GB und erst recht nicht, wenn man bedenkt, dass Programme meist so klein sind, dass sie Dateisystem Bloecke komplett ausfuellen und damit sowieso Platz verschwenden. Ziel des ganzen: Behandel es nicht als Argument.
Re: Python3 und tkinter
Verfasst: Sonntag 6. Februar 2011, 15:53
von Xynon1
daemonTutorials hat geschrieben:Da muss ich Xynon1 recht geben, obwohl der mir heute auf den Keks geht
Das bisschen ging dir schon auf den Keks

, war doch noch gar nicht in fahrt gekommen
daemonTutorials hat geschrieben:Und die Funktion end() ist überflüssig, benutze stattdessen in der Buttondeklaration "command=main.destroy()" ! Damit hat Xynon1 mich auch genervt!
Hier auch nochmal, die Klammern hinter dem "main.destroy" weglassen, (WENN diese an "command" übergeben wird - ist im übrigen hier nicht der Fall), ansonsten wird die Funktion gleich gerufen.
daemonTutorials hat geschrieben:Soll das Programm nur Google öffnen? Wie wäre es mit dem modul os!
Wie cofi schon angemerkt hatte keine gute Idee, da "webbrowser" extra für diesen Zweck gebaut wurde. Überleg mal was bei dir passiert, wenn der jenige keinen Firefox hat. Zudem bekommt man per "os.cmd" auch kein handle auf den Prozess.
Und nur so als Tipp, falls du es noch nicht kennst, diese "Leerzeichenregeln" sind in der Style Guide als
PEP8 festgehalten.
Re: Python3 und tkinter
Verfasst: Mittwoch 9. Februar 2011, 13:47
von daemonTutorials
Da muss ich euch beiden leider recht geben.
@Xynon1: Ich weiß
@Cofi: Das mit catch ist mir auch aufgefallen, müsste except heißen. Und das mit os und cmd habee ich mir mal aus dem Ärmel geschüttelt. Habe lang nicht mehr programmiert. Müsste mir mal wieder ein Buch anschauen.
Re: Python3 und tkinter
Verfasst: Mittwoch 9. Februar 2011, 13:52
von BlackJack
@daemonTutorials: Bücher nur anschauen nützt nicht viel -- man sollte sie besser lesen und den Inhalt wenn möglich auch verstehen. Oder zumindest die Dokumentation zu den Modulen und Funktionen die man verwendet sollte man lesen. Noch besser ist es, wenn man etwas ausprobiert bevor man es anderen als Lösung vorschlägt. Dann fallen einem selber "Lösungen" die gar nicht erst kompiliert werden können, schon auf bevor man damit niemandem weiterhilft.
