IDLE - Aufruf mit os.system

Fragen zu Tkinter.
Antworten
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

Hi!
Ich hab mal in der regedit geschaut, wie der command für den Befehl "Open with IDLE" sei, den man erhält, wenn man mit der rechten Maustaste auf eine .py(w) klickt...

Ergebnis: "*pythonw.exe ... lib\idlelib\idle.pyw -n -e"
nun habe ich es versucht mit der os.system-fkt nachzubauen:

Code: Alles auswählen

from Tkinter import *
from os import system
stdpath = "C:\\Python24\\"
def startnewshell(modulpath=""):
    global stdpath
    system(stdpath + "pythonw " + stdpath + r"lib\idlelib\idle.pyw -n -e " + modulpath)
    
root = Tk()

bu_startnewshell = Button(root, text = "Neues Editorfenster", command = startnewshell)
bu_startnewshell.pack()
root.mainloop()
Die IDLE öffnet sich zwar, aber mein tk-fenster hängt sich auf...
liegt das vl. daran, dass die IDLE mit Tkinter geproggt wurde und nun zwei mainloops laufen?
[size=85]"Unsere Situation ist immer die eines schwarzen Mannes der in einem schwarzen Keller einen schwarzen Hut sucht, den es vielleicht gar nicht gibt." Sir Karl R. Popper[/size]
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

bei os.system wartest du auf die Antwort des aufgerufenen Befehls und die bekommst du erst, wenn die IDLE sich wieder beendet hat.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Wenn ich das richtig verstandne habe, könntest du das mit threads lösen. :?
mfg

Thomas :-)
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi Hannes,

beeindruckend diese Herangehensweise. :-)
Du musst den Aufruf nur als neuen Thread ausführen, dann kannst Du auch weitere Fenster öffnen. Am einfachsten so:

Code: Alles auswählen

from Tkinter import *
from os import system
from thread import start_new_thread as snThread

stdpath = "C:\\Python24\\"
def startnewshell(modulpath=""):
    snThread(system, (stdpath + "pythonw " + stdpath + r"lib\idlelib\idle.pyw -n -e " + modulpath,))
   
root = Tk()

bu_startnewshell = Button(root, text = "Neues Editorfenster", command = startnewshell)
bu_startnewshell.pack()
root.mainloop()
Grüße,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

wow... das es so tiefgreifend wird, wusste ich nicht... :)

ich habe gerade kein python da - aber sobald ich zuhause bin, versuche ich es!
geht es aber nicht auch irgendwie mit spawn* irgendwo in os oder muss man unbedingt diese threads nehmen?

vielen dank für die schnellen aws!
lg hannes
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi Hannes,

das ist dasselbe Kind mit anderem Namen. Spawn, Fork und Threads - alle erzeugen Subprozesse. Fork gibt's (war zumindest mal so) nur für UNIX und spawn führt Dateien aus. Für Funktionen/Methoden fährst Du mit start_new_thread am besten, behaupte ich kühn.

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

es klappt ausgezeichnet! :D
es gibt aber noch einen gewaltigen schönheitsfehler...:
das schwarze fenster (cmd), welches sich dabei öffnet - kann man das nicht umgehen? (obwohl ich mal annehme: nein, da die cmd ja wiederum auf das schließen der idle zu warten scheint) hat jemand ne idee noch dazu?!
(echt schon mal tausend dank, dass ihr mir bisher so gute tipps gegeben habt :) )
[size=85]"Unsere Situation ist immer die eines schwarzen Mannes der in einem schwarzen Keller einen schwarzen Hut sucht, den es vielleicht gar nicht gibt." Sir Karl R. Popper[/size]
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

probier das ganze mal mit os.startfile('Pfad und Name der zu öffnenden Datei') anstatt os.system()
mfg

Thomas :-)
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

aber wie kann ich da die argumente angeben??
Antworten