Python 3.x tkinter窗口中的Python变量

Python 3.x tkinter窗口中的Python变量,python-3.x,tkinter,Python 3.x,Tkinter,我正在建立一个设备,它可以计算一台机器制造了多少零件,然后以特定的数字关闭机器。我使用Arduino完成所有I/O工作,然后将串行数据作为变量partCount导入Python。我想在tkinter中创建一个简单的GUI来显示已经制作的部件数量和所需的总数。问题是,我一直在标签行上得到一个错误,它包含一个变量,而不仅仅是一个文本。我对它做了很多研究,但不知什么原因,我就是搞不懂。如有任何建议,将不胜感激 import serial import csv import datetime impor

我正在建立一个设备,它可以计算一台机器制造了多少零件,然后以特定的数字关闭机器。我使用Arduino完成所有I/O工作,然后将串行数据作为变量partCount导入Python。我想在tkinter中创建一个简单的GUI来显示已经制作的部件数量和所需的总数。问题是,我一直在标签行上得到一个错误,它包含一个变量,而不仅仅是一个文本。我对它做了很多研究,但不知什么原因,我就是搞不懂。如有任何建议,将不胜感激

import serial
import csv
import datetime
import tkinter

#Part Variables
partNumber = "A-33693" #Part Number
stockupTotal = 10

arduinoSerialData = serial.Serial('com3',9600) #Serial Variable
now = datetime.datetime.now()

#GUI
window = tkinter.Tk()
window.title("Troy Screw Products")

titleLabel = tkinter.Label(window, text="Davenport Machine Control")
partNumberLabel = tkinter.Label(window, text="Part #:")
stockUpTotalLabel = tkinter.Label(window, text="Stockup Total:")
partCountLabel = tkinter.Label(window, text="Current Part Count:")
partNumberInfo = tkinter.Label(window, partNumber)
stockUpTotalInfo = tkinter.Label(window, stockupTotal)
partCountInfo = tkinter.Label(window, partCount)


titleLabel.pack()
partNumberLabel.pack()
partNumberInfo.pack()
stockUpTotalLabel.pack()
stockUpTotalInfo.pack()
partCountLabel.pack()
partCountInfo.pack()

window.mainloop()


#Write to CSV File
def writeCsv():
    with open("machineRunData.csv", "a") as machineData: 
        machineDataWriter = csv.writer(machineData) 
        machineDataWriter.writerow([partNumber, "Stockup Complete",now.strftime("%Y-%m-%d %H:%M")])
        machineData.close()

#Serial Import
while (1==1):
    if (arduinoSerialData.inWaiting()>0):
        partCount = arduinoSerialData.readline()
        partCount = int(partCount)
        if partCount == 999999:
             writeCsv()
        print(partCount)

您可以为
标签
小部件提供多个选项。应按名称指定第一个参数后的所有参数:

partNumberInfo = tkinter.Label(window, text=PartNumber)

要在Tkinter中使用Python变量,需要使用特殊的Tk对象,其中有四个:
BooleanVar
DoubleVar
IntVar
StringVar
。请参阅以获得一个好的示例。

因此,在上周进行了大量研究之后,我找到了一个解决方案。问题是程序将运行GUI,但在关闭GUI窗口之前不会运行串行导入的代码。我需要一种方法来运行和更新GUI,同时导入串行数据。我通过为这两个操作创建一个线程来解决这个问题。也许有一个更简单的方法,但这就是我想到的。下面是有类似问题的人的代码

import serial
import time
import threading
from tkinter import *

#Part Variables
partNumber = "A-33693" #Part Number
stockupTotal = 10

partCount = 0

def countingModule():
    global partCount
    while (1==1):
        time.sleep(2)
        partCount += 1
        print(partCount)


def gui():
    global partCount
    root = Tk()

    pc = IntVar()
    pc.set(partCount)

    titleLabel = Label(root, text="Machine Control")
    partNumberLabel = Label(root, text="Part #:")
    stockUpTotalLabel = Label(root, text="Stockup Total:")
    partCountLabel = Label(root, text="Current Part Count:")
    partNumberInfo = Label(root, text=partNumber)
    stockUpTotalInfo = Label(root, text=stockupTotal)
    partCountInfo = Label(root, textvariable=pc)


    titleLabel.pack()
    partNumberLabel.pack()
    partNumberInfo.pack()
    stockUpTotalLabel.pack()
    stockUpTotalInfo.pack()
    partCountLabel.pack()
    partCountInfo.pack()

    def updateCount():
        pc.set(partCount)
        root.after(1, updateCount)

    root.after(1, updateCount)
    root.mainloop()

op1 = threading.Thread(target = countingModule)
op2 = threading.Thread(target = gui)
op1.start()
op2.start()

在变量将所有信息添加到窗口之前添加“text=”。我唯一剩下的问题是,我希望窗口中的数字随着程序中变量的变化而变化。现在它只是保持在零。我需要让tkinter窗口中的变量在中更新时进行更新python@shark38j:更新的答案。@shark38j您可以使用textvariable选项和StringVar,如Ethan建议的和链接答案中所示。或者,您可以使用text选项并使用
partNumberInfo['text']=int\u as\u string
进行更新。不要同时使用这两个选项。