Python Tkinter GUI problem

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Guldancistrus
Inlägg: 418
Blev medlem: 17 april 2012, 16:31:47
Ort: Norrköping

Python Tkinter GUI problem

Inlägg av Guldancistrus »

Hej!
Jag försöker lära mig hur man gör ett gui med Tkinter i Python, bland annat för att göra chattprogrammet jag pratade om tidigare.
Vad jag försöker göra nu är att skriva ut en ström av text i en textruta.

Kod: Markera allt

# -*- coding: utf-8 -*-
from Tkinter import *
import time
import thread

def loopen():

    while TRUE:
        T.insert(END, "EN NY RAD 123456789\n")
        time.sleep(1)
        

root = Tk()
T = Text(root, height = 15, width = 35)
T.pack(side = LEFT, fill = Y)
S = Scrollbar(root)
S.pack(side = RIGHT, fill = Y)
S.config(command = T.yview)
T.config(yscrollcommand = S.set)
T.insert(END, "Hej!\nDetta är en textruta\nmed\nflera\nrader\n")

thread.start_new_thread(loopen, ())

root.mainloop()


Mitt största problem var först att all kod jag sätter innan root.mainloop() körs före fönstret öppnas och all kod jag sätter efter root.mainloop() körs när fönstret har stängts. Då tänkte jag att jag kunde sätta koden som skriver ut text i textrutan i en ny tråd.
Det verkar funka bra, men jag får ett fel när jag stänger rutan.

Kod: Markera allt

Unhandled exception in thread started by <function loopen at 0xb6dac304>
Traceback (most recent call last):
  File "/home/transistor256/Dokument/Python/Texttest.py", line 9, in loopen
    T.insert(END, "EN NY RAD 123456789\n")
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 3071, in insert
    self.tk.call((self._w, 'insert', index, chars) + args)
RuntimeError: main thread is not in main loop
Hur löser jag detta? :?
Zlim00
Inlägg: 74
Blev medlem: 2 juni 2008, 17:23:34
Ort: Haninge

Re: Python Tkinter GUI problem

Inlägg av Zlim00 »

Hur har du tänkt att "loopen" ska stanna?
Din tråd kommer att fortsätta skriva till textrutan efter att du har stängt det fönstret, och vad ska hända då?
Användarvisningsbild
Guldancistrus
Inlägg: 418
Blev medlem: 17 april 2012, 16:31:47
Ort: Norrköping

Re: Python Tkinter GUI problem

Inlägg av Guldancistrus »

Aha, nu fattar jag! :)
Jag måste alltså på något sätt kommunicera med "loopen" och tala om för den att det är dags att stänga.
Hur kommunicerar man mellan trådar?
Edit:
Det verkar som att man använder köer för att kommunicera, ska läsa på om dem.
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Python Tkinter GUI problem

Inlägg av SvenW »

Jag kan ingenting om TkInter, men jag misstänker att det snarare är 'bind' (i kontexten Tkinter) och 'callbacks' du bör studera.
Och att det är client-server-tänkande som gäller.
Användarvisningsbild
Guldancistrus
Inlägg: 418
Blev medlem: 17 april 2012, 16:31:47
Ort: Norrköping

Re: Sv: Python Tkinter GUI problem

Inlägg av Guldancistrus »

Aha, ska kolla det.
Skriv svar