を変え、私は次のコードで私のTkinterのGUIでラベルを変更する必要があります。が正しくTkinterのラベル
import os
import multiprocessing
from multiprocessing import Process, Pool
import threading
import queue
import tkinter as tk
from tkinter import *
from tkinter import ttk
from time import time
import minimalmodbus
import serial
minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL = True
THREAD_LOCK = threading.Lock()
class Page(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
def show(self):
self.lift()
class Page1(Page):
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
self.temp_label = tk.Label(self, text='temp', width=10)
self.temp_label.pack(side="top")
self.connect_button = tk.Button(self, text='Connect', command=self.run_code)
self.connect_button.pack(side="top")
def run_code(self):
all_thread()
def set_result(self, read):
self.temp_label.config(text=read[2])
def all_thread(): #not in class Page1()
thread = threading.Thread(target=all_process)
thread.start()
def all_process():
gas = minimalmodbus.Instrument("COM3", 1)
gas.serial.baudrate = 9600
gas.serial.bytesize = 8
gas.serial.parity = serial.PARITY_NONE
gas.serial.stopbits = 1
gas.serial.timeout = 0.25
gas.mode = minimalmodbus.MODE_RTU
gas_list = [gas]
processes = []
while len(gas_list) > 0:
val = 1
with THREAD_LOCK:
for sen in gas_list:
proc = Process(target=main_reader, args=(sen, val))
processes.append(proc)
proc.start()
val += 1
for sen in processes:
sen.join()
time.sleep(1)
def main_reader(sen, val):
try:
read = sen.read_registers(0,42)
except OSError:
read = "Communication Error"
except ValueError:
read = "RTU Error"
if val == 1:
Page1().set_result(read)
class MainView(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
p1 = Page1(self)
buttonframe = tk.Frame(self)
container = tk.Frame(self)
buttonframe.pack(side="top", fill="x", expand=False)
container.pack(side="top", fill="both", expand=True)
p1.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
b1 = tk.Button(buttonframe, text="Page 1", command=p1.lift)
b1.pack(side="left")
p1.show()
if __name__ == "__main__":
root = tk.Tk()
main = MainView(root)
main.pack(side="top", fill="both", expand=True)
root.wm_geometry("1000x600")
root.mainloop()
は、私がread
リスト内の3番目の項目にtemp_label
のテキストを変更したいです。ただし、set_result
関数が正しく動作していません。データがset_result
になると、temp_label
のテキストは変更されません。私は間違って何をしていますか?
あなたの例では、 'set_result'関数を呼び出すことはないので、誰も' read'が何であるか知っていません。 – CommonSense
それを扱う関数を追加するのを忘れていた...私の悪い。質問は、その関数 'main_reader'を含むように編集されました。 – GreenSaber
デバッグを済ませましたか? 'read'があなたの考えであると確信しましたか? –