0

受信したデータを上から印刷するのではなく、tk ウィンドウの中央に配置したいので、TEXT ウィジェットの代わりに Label ウィジェットを使用してコードを記述したいと考えています。 「ANCHOR」オプションは、ウィジェットにテキストが必要とするよりも多くのスペースがある場合に、テキストが配置される場所を制御します。デフォルトは anchor=CENTER で、テキストを使用可能なスペースの中央に配置します。しかし、私のコードでは、常にデータを削除および挿入しています。私の知識によると、削除および挿入オプションはテキストウィジェットでのみ使用できます。ラベルウィジェットで可能ですか。私を助けてください。LABEL ウィジェットを使用してコード bt を変更しようとしましたが、成功しません。ラベルウィジェットを使用するようにコードを変更するのを手伝ってください。ありがとう。

import serial
import threading
import Queue
import Tkinter as tk
from Tkinter import *


class SerialThread(threading.Thread):
    def __init__(self, queue):
        threading.Thread.__init__(self)
        self.queue = queue
    def run(self):
        s = serial.Serial('COM11',9600)

        while True:
            if s.inWaiting():
                text = s.readline(s.inWaiting())
                self.queue.put(text)

class App(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.geometry("1360x750")
        frameLabel = tk.Frame(self, padx=40, pady =40)
        self.text = tk.Text(frameLabel, wrap='word', font='TimesNewRoman 40',
                        bg=self.cget('bg'), relief='flat')
        frameLabel.pack()
        self.text.pack()
        self.queue = Queue.Queue()
        thread = SerialThread(self.queue)
        thread.start()
        self.process_serial()

    def process_serial(self):
        firstitem = True
        while self.queue.qsize():
            try:
                new = self.queue.get()
                if firstitem:
                    self.text.delete(1.0, 'end')
                firstitem = False
                self.text.insert('end', new)
            except Queue.Empty:
                pass
        self.after(100, self.process_serial)

app = App()
app.mainloop()
4

1 に答える 1

2

Tkinter Label ウィジェットには、text表示されているテキストを示すオプションがあります。ウィジェットが表示するすべてのコンテンツを変更したい場合は、

self.text = tk.Text(frameLabel, ...)

# ...

new = self.queue.get()     
self.text.delete(1.0, 'end')
self.text.insert('end', new)

これとともに:

self.label = tk.Label(frameLabel, ...)

# ...

new = self.queue.get()     
self.label.config(text=new)
于 2013-07-20T12:03:55.867 に答える