Seite 1 von 1

StringVar() und [Errno 10054]-Probleme

Verfasst: Montag 13. August 2018, 13:13
von DMD-OL
hi
ich benutze python 2.7.10 und habe zusätzlich PyScripter und PyCharm auf meinem rechner.
meine beiden fragen:
1):
wenn ich meinen code laufen lasse, werden mir alle label mit inhalt angezeigt. wenn ich dann aber auf Back und anschließend direkt
wieder auf Starten clicke, werden mir nur die label ohne textinhalt angezeigt.
kann mir jemand helfen, was da nicht stimmt?
und 2):
wenn ich den code in PyScripter starte und dann direkt wieder auf schließen clicke, gibt es einen fehler.
>>> Traceback (most recent call last):
File "C:\Program Files (x86)\PyScripter\Lib\rpyc.zip\rpyc\core\netref.py", line 196, in __call__
File "C:\Program Files (x86)\PyScripter\Lib\rpyc.zip\rpyc\core\netref.py", line 71, in syncreq
File "C:\Program Files (x86)\PyScripter\Lib\rpyc.zip\rpyc\core\protocol.py", line 429, in sync_request
File "C:\Program Files (x86)\PyScripter\Lib\rpyc.zip\rpyc\core\protocol.py", line 229, in _send_request
File "C:\Program Files (x86)\PyScripter\Lib\rpyc.zip\rpyc\core\protocol.py", line 224, in _send
File "C:\Program Files (x86)\PyScripter\Lib\rpyc.zip\rpyc\core\channel.py", line 69, in send
File "C:\Program Files (x86)\PyScripter\Lib\rpyc.zip\rpyc\core\stream.py", line 181, in write
EOFError: [Errno 10054] Eine vorhandene Verbindung wurde vom Remotehost geschlossen

in PyCharm gibt es diesen fehler nicht.
wieso gibt es diesen fehler in PyScripter???

Mein Code lautet:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import Tkinter
from Tkinter import RAISED, RIDGE, X, Y, LEFT, RIGHT, NW, VERTICAL, ALL, NSEW
import tkFileDialog
import os
import os.path
import time


class Tablewindow:

    liste = [['Hallo.txt', u'325315663', u'Wed Aug 08 15:15:42 2018', u'Nein']]

    def __init__(self, window):
        self.window = window
        self.straing = []
        self.window.geometry("%dx%d+%d+%d" % (800, 700, 350, 100))
        # Frame Table
        self.table = Tkinter.Frame(self.window, width=708, height=500, relief=RAISED, borderwidth=2)
        # Frame Bottom
        self.framebottom = Tkinter.Frame(self.window, height=80, width=150, relief=RAISED, borderwidth=2)
        self.break_button = Tkinter.Button(self.framebottom, text="Back", command=self.backing)
        self.quit_button = Tkinter.Button(self.framebottom, text="Quit", command=self.quitting)

        self.layout()

    def layout(self):
        # Frame Table
        self.table.place(x=400, y=350, anchor="c")
        # Frame Bottom
        self.framebottom.place(x=400, y=650, anchor="c")
        self.break_button.place(x=60, y=25, anchor="c")
        self.quit_button.place(x=80, y=55, anchor="c")
        self.data()

    def data(self):
        for ix, sustesa in enumerate(self.liste):
            izahl = int(ix + 1)

            pos_name = sustesa[0]
            pos_groesse = sustesa[1]
            pos_datum = sustesa[2]
            pos_verarbeitet = sustesa[3]

            var_ix = Tkinter.StringVar()
            label_ix = Tkinter.Label(self.table, textvariable=var_ix, width=7, relief="sunken", bg='#fff', fg="#000000000", justify='center')
            label_ix.grid(row=0, column=0, sticky=NSEW)
            var_ix.set(ix)

            var_name = Tkinter.StringVar()
            label_name = Tkinter.Label(self.table, textvariable=var_name, width=30, relief="sunken", bg='#fff', fg="#000000000", justify='center')
            label_name.grid(row=0, column=1, sticky=NSEW)
            var_name.set(pos_name)

            var_groesse = Tkinter.StringVar()
            label_groesse = Tkinter.Label(self.table, textvariable=var_groesse, width=18, relief="sunken", bg='#fff', fg="#000000000", justify='center')
            label_groesse.grid(row=0, column=2, sticky=NSEW)
            var_groesse.set(pos_groesse)

            var_datum = Tkinter.StringVar()
            label_datum = Tkinter.Label(self.table, textvariable=var_datum, width=20, relief="sunken", bg='#fff', fg="#000000000", justify='center')
            label_datum.grid(row=0, column=3, sticky=NSEW)
            var_datum.set(pos_datum)

            var_verarbeitet = Tkinter.StringVar()
            label_verarbeitet = Tkinter.Label(self.table, textvariable=var_verarbeitet, width=8, relief="sunken", bg='#fff', fg="#000000000", justify='center')
            label_verarbeitet.grid(row=0, column=4, sticky=NSEW)
            var_verarbeitet.set(pos_verarbeitet)


    def backing(self):
        self.window.withdraw()
        root = Tkinter.Tk()
        Startwindow(root)

    def quitting(self):
        self.window.quit()


class Startwindow:

    def __init__(self, root):
        self.root = root
        self.root.title("MyRootGUI")
        self.root.geometry("%dx%d+%d+%d" % (300, 150, 600, 250))
        self.label = Tkinter.Label(self.root, text="Start Page!", width=15)
        self.start_button = Tkinter.Button(self.root, text="STARTEN", width=15, command=self.start)
        self.close_button = Tkinter.Button(self.root, text="SCHLIESSEN", width=15, command=root.quit)

        self.layout()

    def layout(self):
        self.label.place(relx=.5, rely=.2, anchor="c")
        self.start_button.place(relx=.5, rely=.5, anchor="c")
        self.close_button.place(relx=.5, rely=.75, anchor="c")

    def start(self):
        self.root.withdraw()
        window = Tkinter.Toplevel(self.root)
        tablewin = Tablewindow(window)

    def quitting(self):
        self.root.quit()


if __name__ == '__main__':
    runString = True
    root = Tkinter.Tk()
    startwin = Startwindow(root)
    root.mainloop()

Re: StringVar() und [Errno 10054]-Probleme

Verfasst: Montag 13. August 2018, 13:41
von __deets__
Ich kenne pyscripter nicht, aber da du nichts mit rpyc machst, wird pyscripter wohl einen extra Prozess starten, und mittels rpyc mit dem kommunizieren. Nur das du dein Programm so schnell beendest, dass die IDE und der Prozess sich noch nicht ins Benehmen gesetzt haben. Kannst du ignorieren.

Zu deinem anderen Fehler kann ich nichts sagen. Ich benutze keine IDE.

Re: StringVar() und [Errno 10054]-Probleme

Verfasst: Montag 13. August 2018, 14:16
von __blackjack__
@DMD-OL: Es darf nur ein Exemplar von `Tk` innerhalb eines Programms geben. Das Du in `backing()` ein weiteres erstellst, ist also auf jeden Fall schon mal falsch und kann zu undefiniertem Verhalten führen.

`os.path` braucht man nicht zu importieren, das wird bereits durch den Import von `os` importiert. `os` ist auch kein Package das ein `path`-Modul enthält. `path` ist ein ganz normales Attribut von `os`.

Re: StringVar() und [Errno 10054]-Probleme

Verfasst: Freitag 7. September 2018, 12:07
von DMD-OL
ich habe mir noch mal gedanken zur übertragung von einer Tkinter Klasse auf eine zweite gemacht.
in meinem code verwende ich nur einmal .mainloop().
bin mir aber nicht sicher, ob alles wirklich richtig ist und es vielleicht später nicht doch probleme gibt.
vor allem mit:

Code: Alles auswählen

    def close(self):
        self.second.destroy()
        third = Tkinter.Tk()
        MyFirstGUI(third)
das ist glaube ich immer noch nicht ganz korrekt :cry:
mein code:

Code: Alles auswählen

import Tkinter
from Tkinter import TOP, BOTTOM


class MySecondGUI:

    def __init__(self, second):
        self.second = second
        self.second.geometry("%dx%d+%d+%d" % (500, 350, 600, 250))
        self.frame = Tkinter.Frame(second)
        self.frame.pack()

        self.close_button = Tkinter.Button(self.frame, text="BACK", command=self.close)
        self.close_button.pack()

    def close(self):
        self.second.destroy()
        third = Tkinter.Tk()
        MyFirstGUI(third)


class MyFirstGUI:
    def __init__(self, first):
        self.first = first

        self.first.geometry("%dx%d+%d+%d" % (300, 150, 600, 250))
        self.frame = Tkinter.Frame(first)
        self.frame.grid_propagate(False)
        self.frame.pack()

        self.start_button = Tkinter.Button(self.frame, text="SHOW SECOND", command=self.start)
        self.start_button.pack(side=TOP)
        self.close_button = Tkinter.Button(self.frame, text="CLOSE", command=self.first.quit)
        self.close_button.pack(side=BOTTOM)

    def start(self):
        self.first.destroy()
        second = Tkinter.Tk()
        MySecondGUI(second)


root = Tkinter.Tk()
first_gui = MyFirstGUI(root)
root.mainloop()
wie macht man es richtig???

Re: StringVar() und [Errno 10054]-Probleme

Verfasst: Freitag 7. September 2018, 13:13
von __blackjack__
@DMD-OL: Für zusätzliche Fenster verwendet man `Tkinter.Toplevel`.

Re: StringVar() und [Errno 10054]-Probleme

Verfasst: Freitag 7. September 2018, 14:48
von DMD-OL
wie kann ich das umsetzen???

Re: StringVar() und [Errno 10054]-Probleme

Verfasst: Freitag 7. September 2018, 15:07
von Sirius3
z.b. so:

Code: Alles auswählen

import Tkinter as tk

class MySecondGUI(tk.Toplevel):
    def __init__(self, root):
        tk.Toplevel.__init__(self, root)
        self.root = root
        self.frame = tk.Frame(self)
        self.frame.pack()

        self.close_button = tk.Button(self.frame, text="BACK", command=self.close)
        self.close_button.pack()

    def close(self):
        self.destroy()
        self.root.deiconify()

class MyFirstGUI(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.frame = tk.Frame(self)
        self.frame.grid_propagate(False)
        self.frame.pack()

        self.start_button = tk.Button(self.frame, text="SHOW SECOND", command=self.start)
        self.start_button.pack(side=tk.TOP)
        self.close_button = tk.Button(self.frame, text="CLOSE", command=self.quit)
        self.close_button.pack(side=tk.BOTTOM)

    def start(self):
        self.withdraw()
        self.second = MySecondGUI(self)

def main():
    root = MyFirstGUI()
    root.mainloop()

if __name__ == '__main__':
    main()

Re: StringVar() und [Errno 10054]-Probleme

Verfasst: Freitag 7. September 2018, 15:22
von DMD-OL
MIT VERERBUNG!!! HEFTIG, DA WÄR ICH NIE DRAUF GEKOMM!
THX :lol: