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