2016-03-22 22 views
0

Beim Ausführen eines tkinter-Programms im Standard-Python-Idle-Programm wird das Fenster angezeigt und Sie können damit interagieren, aber das gleiche Programm in pycharm zu starten bewirkt, dass das Programmfenster kurz aufblinkt dann schließen.Pycharm schließt automatisch ein Programm, python idle doesnt

ich sein gehe davon mit dem mainloop zu tun, was müssen Sie in Ihrem Code modifizieren, um das Programm zu verhindern automatisch schließen, wenn in PyCharm

Ein excert von meinem Code ausgeführt folgt

from tkinter import * 
import tkinter 
from tkinter import Text, Tk, ttk 
import csv 
from csv import DictReader 
import sys 
import os 

class GUI: 
    def __init__(self, root): 


.... 

def main(): 
    global label 
    root = Tk() 
    root.title(" My program") 
    root.geometry("550x330+600+300") 
    mycolor = '#%02x%02x%02x' % (39, 39, 39) # background color 
    root.configure(bg=mycolor) 

    gui = GUI(root) 

main() 

Update: Nach ein bisschen Mucking, teilweise aufgrund meines Codes nicht der Beste (Anfänger), habe ich es geschafft, es zur Arbeit zu bringen. Für alle Interessierten heres die Änderung:

from tkinter import * 
import csv 
from csv import DictReader 
import sys 
import os 

class GUI: 
def __init__(self, master): 
    self.master = master 
    master.title(" My Programs") 
    master.geometry("550x330+600+300") 
    master.iconbitmap('logo.ico') 
    mycolor = '#%02x%02x%02x' % (39, 39, 39) # background color 
    master.configure(bg=mycolor) 

....... Die meisten der oben genannten Sachen Programm eingerichtet, aber MAIN CODE HIER

root = Tk() 
gui = GUI(root) 
root.mainloop() 

funktioniert nun wie erwartet

+0

Hast du hier nachgesehen? http://stackoverflow.com/questions/27637197/tkinter-window-closes-automatisch-after-python-program-has-run-in-pycharm – flyingmeatball

+0

Ich tat, aber didnt denke, dass es für mein Programm relevant war. Meine hat ein GUI-Fenster mit Dateneingabefeldern und Suchschaltfläche etc. Ich bin offen dafür, dass es sich aber als falsch herausstellt :) – LesM76

+0

Also hast du root.mainloop() nach deinen Event-Handlern hinzugefügt (wenn du welche hast)? Was war das Ergebnis? – flyingmeatball

Antwort

1
gezeigt

Python hat eine -i Startoption, die bewirkt, dass Python nach Beendigung des Programms in eine interaktive Bewegung eintritt, anstatt zu beenden. IDLE führt den Code so aus, als ob am Terminal python -i file.py eingegeben wurde. Dies ermöglicht es einem, die Live-GUI interaktiv zu erkunden, indem Code in die Shell eingegeben wird.

Aus dieser Frage und der von fliegenden Fleisch verwiesen wird, scheint, dass PyCharm -i nicht verwendet oder simuliert. Also muss man ein tkinter-Programm mit root.mainloop beenden, um etwas zu sehen. Wenn man keine Schaltfläche hinzufügt, um die Hauptschleife zu beenden, ohne die Anwendung zu zerstören, kann man nicht mit interaktiven Anweisungen interagieren. (Auch dies basiert vollständig auf dem, was auf SO veröffentlicht wurde, da ich keine Erfahrung mit PyCharm habe.)