Python 带线程的全局变量和Tkinter
所以我是一个编程新手,我正在努力让这个线程工作。然而,我正在努力使用线程和tkinter。我认为问题在于全局变量,但我真的不知道情况是否如此。感谢您的帮助。(这段代码也被修改了,我需要线程,因为函数最终会有一个循环)Python 带线程的全局变量和Tkinter,python,multithreading,tkinter,Python,Multithreading,Tkinter,所以我是一个编程新手,我正在努力让这个线程工作。然而,我正在努力使用线程和tkinter。我认为问题在于全局变量,但我真的不知道情况是否如此。感谢您的帮助。(这段代码也被修改了,我需要线程,因为函数最终会有一个循环) 任何帮助都将不胜感激!提前感谢:)此代码将使按钮无法使用或不能多次单击。使用command=lambda:threading.Thread(serial_comms).start()。您好,这仍然会导致代码出错-现在下拉菜单甚至不允许单击?应该会重新检查您的code@CoolClo
任何帮助都将不胜感激!提前感谢:)此代码将使按钮无法使用或不能多次单击。使用
command=lambda:threading.Thread(serial_comms).start()
。您好,这仍然会导致代码出错-现在下拉菜单甚至不允许单击?应该会重新检查您的code@CoolCloud它应该是command=lambda:threading.Thread(target=serial_comms).start()
@acw1668哦,是的,target
。
from tkinter import *
import serial
import threading
root = Tk()
root.title("MIDI Piano")
root.geometry('250x250+250+250')
ser = None
clicked = StringVar()
COM_ports = ["COM1",
"COM2",
"COM3",
"COM4",
"COM5",
"COM6",
"COM7",
"COM8",
"COM9",
"COM10"]
def serial_comms():
global ser
global clicked
COM = clicked.get()
ser = serial.Serial(COM, 9600)
clicked.set("COM1")
# note there are definitions here and other widgets
# Widgets that need to be updated
COM_frame = LabelFrame(root, text="Choose COM Port", padx=30, pady=30)
COM_frame.place(x=1, y=200)
COM_drop = OptionMenu(COM_frame, clicked, *COM_ports)
COM_drop.pack()
COM_button = Button(COM_frame, text="Execute Port Selection",
command=threading.Thread(serial_comms).start())
COM_button.pack()
root.mainloop()