Python 带线程的全局变量和Tkinter

Python 带线程的全局变量和Tkinter,python,multithreading,tkinter,Python,Multithreading,Tkinter,所以我是一个编程新手,我正在努力让这个线程工作。然而,我正在努力使用线程和tkinter。我认为问题在于全局变量,但我真的不知道情况是否如此。感谢您的帮助。(这段代码也被修改了,我需要线程,因为函数最终会有一个循环) 任何帮助都将不胜感激!提前感谢:)此代码将使按钮无法使用或不能多次单击。使用command=lambda:threading.Thread(serial_comms).start()。您好,这仍然会导致代码出错-现在下拉菜单甚至不允许单击?应该会重新检查您的code@CoolClo

所以我是一个编程新手,我正在努力让这个线程工作。然而,我正在努力使用线程和tkinter。我认为问题在于全局变量,但我真的不知道情况是否如此。感谢您的帮助。(这段代码也被修改了,我需要线程,因为函数最终会有一个循环)


任何帮助都将不胜感激!提前感谢:)

此代码将使按钮无法使用或不能多次单击。使用
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()