读取变量,比较CSV数据并输出

2024-04-19 23:18:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我今天完全崩溃了,让一些CSV的东西工作。下面是完整的代码和csv文件的剪切和粘贴。 我试图在shop order字段中输入一个与CSV第一列中的数字相匹配的数字。当匹配完成后,整行打印到大的输出框中,第二部分将拆分csv字段,以便将数据输入到quantity和description字段中,但我应该先学习爬网。在

我不能让csv显示在输出框,我不能确定什么是错误的,或者我是否丢失了代码。在

如果我删除了csv代码,输入到shop order框中的数字会打印到大的输出框中,输入的任何字母都会出现一个错误框,这个错误框工作得很好,这正是我下一步要做的。在

from tkinter import *
from tkinter import ttk
import sys
import csv
from csv import DictReader

class GUI:
def __init__(self, rootWindow):

    #variable
    sonumber = StringVar()
    result = int()

    #item1
    self.label = ttk.Label(rootWindow, text="Shop Order:")
    self.label.grid(row=1, column=1, sticky=(E), padx=3, pady=3)

    self.SOentry = ttk.Entry(rootWindow, width=5, background="white", textvariable = sonumber)
    self.SOentry.grid(row=1, column=2, sticky=(W, E), padx=3, pady=3) 
    #item2
    self.label2 = ttk.Label(rootWindow, text="Quantity:")
    self.label2.grid(row=1, column=3, sticky=(E), padx=3, pady=3)

    self.outputQty = Text(rootWindow, width=5, height=1, background="white")
    self.outputQty.grid(row=1, column=4, sticky=(W, E), padx=3, pady=3) 

    #item3
    self.label3 = ttk.Label(rootWindow, text="Description:")
    self.label3.grid(row=2, column=1, sticky=(E), padx=3, pady=3)

    self.outputDesc = Text(rootWindow, width=5, height=1, background="white")
    self.outputDesc.grid(row=2, column=2, columnspan=5, sticky=(W, E), padx=3, pady=3) 

    #output
    self.label4 = ttk.Label(rootWindow, text="Drawings:")
    self.label4.grid(row=3, column=1, sticky=(N,E), padx=3, pady=3)

    self.dwgoutputbox = Text(rootWindow, width=50, height=15, background="white")
    self.dwgoutputbox.grid(row=3, column=2, columnspan=5, padx=3, pady=3)
    sys.stdout = TextRedirector(self.dwgoutputbox, "printdwgoutputbox") #redirects from shell to screen

    #buttons
    def DoASearch():
        try:
            print(int(sonumber.get()))
        except ValueError:
            messagebox.showwarning("Fail !!", "Please enter a valid Shop Order number.")

        with open("lesspreadsheettest.csv") as csvfile:
            reader = csv.DictReader(csvfile)
            for row in reader:
                result=(row['Shop Order'])
                if sonumber == result:
                    print(row['Shop Order'], row['Part Number'], row['Description'])

    self.searchbutton = ttk.Button(rootWindow, text="Search", command=DoASearch)
    self.searchbutton.grid(row=1, column=7, sticky=W, padx=3, pady=3)


    def clear_text():
        self.SOentry.delete(0, 'end')

    self.clrsearchbutton = ttk.Button(rootWindow, text="Reset", command=clear_text)
    self.clrsearchbutton.grid(row=2, column=7, sticky=W, padx=3, pady=3)
    #

    self.exitbutton = ttk.Button(rootWindow, text="Exit", command=rootWindow.destroy)
    self.exitbutton.grid(row=3, column=7, sticky=(N,W), padx=3, pady=3)


class TextRedirector(object):
def __init__(self, widget, tag="printdwgoutputbox"):
    self.widget = widget
    self.tag = tag

def write(self, str):
    self.widget.configure(state="normal")
    self.widget.insert("end", str, (self.tag,))
    self.widget.configure(state="disabled")

def main():
global label   
rootWindow = Tk()
rootWindow.title("Production Drawings")
rootWindow.geometry("575x325+600+300")
gui = GUI(rootWindow)
rootWindow.mainloop()

main()

My test csv code is
Shop Order  Part Number Description Quantity
12345   5-1841111-1 Ferrari California  1
12346   5-1841222-2 Porsche 911 2
12347   5-1841333-3 Lamborghini Aventador   3
12348   5-1841444-4 Jaguar F-Type   4
12349   5-1841555-5 Bugatti Veyron  5

Tags: csvtextimportselfdefcolumnwidgetshop
1条回答
网友
1楼 · 发布于 2024-04-19 23:18:54

您的sonumber变量是Tkinter StringVar,而不是普通的Python字符串。进行比较时:

if sonumber == result:
    print(row['Shop Order'], row['Part Number'], row['Description'])

您正在将Tkinter StringVar与字符串进行比较,因此它的计算结果始终为False。如果改用sonumber.get(),则得到实际值,应该没有问题。在

相关问题 更多 >