如何验证标签文本是否在Python的tkinter中存在?

问题描述 投票:0回答:1

我是python的新手,我想知道如何验证标签文本是否存在。我收到一个错误:enter image description here

下面是我的完整代码。您可以在底部看到功能validate,并且在弄清楚如何使标签在其他情况下工作。

import openpyxl, os
import glob
from tkinter import *
from tkinter import ttk
from tkinter import filedialog

class Root(Tk):
    def __init__(self):
        super(Root, self).__init__()

        #Add a widget title
        self.title("Automated filling up of form in iPage")

        #Set widget width and height
        self.minsize(300, 200)

        #Display browse button
        self.displayForm()

    def doubleQuote(self, word):
        return '"%s"' % word

    def displayForm(self):
        #Display label frame
        self.labelFrame = ttk.LabelFrame(self, text = "Open Excel File")
        self.labelFrame.grid(column=1, row=2, pady=5, sticky=NW)

        #Create browse button
        self.button = ttk.Button(self.labelFrame, text = "Browse a File",command = self.openFileDialog)
        self.button.grid(column=1, row=1, padx=5, pady=5)

        ttk.Label(self, text="Cell From:").grid(column=0, row=0, padx=5)
        ttk.Label(self, text="Cell To:").grid(column=0, row=1, padx=5)

        self.cf = StringVar()
        self.ct = StringVar()

        self.cellFrom = ttk.Entry(self, textvariable=self.cf)
        self.cellTo = ttk.Entry(self, textvariable=self.ct)

        self.cellFrom.grid(column=1, row=0, pady=5)
        self.cellTo.grid(column=1, row=1, pady=5)

        self.cf.trace("w",self.validate)
        self.ct.trace("w",self.validate)

        self.submitBtn = ttk.Button(self, text='Submit', command=self.validate)
        self.submitBtn.grid(column=1, row=3, pady=5, sticky=NW)


    def openFileDialog(self): 

        #Create a file dialog
        self.filename = filedialog.askopenfilename(initialdir =  "/", title = "Select A File", filetype =
        [("Excel files", ".xlsx .xls")])

        self.label = ttk.Label(self.labelFrame, text = "", textvariable=self.fl)
        self.label.grid(column = 1, row = 2)

        #Change label text to file directory
        self.label.configure(text = self.filename)

        self.label.trace("w",self.validate)

        #Return tail of the path  
        self.trimmed = os.path.basename(self.filename)

        #Pass tail variable
        self.openSpreadsheet(self.trimmed)

    def openSpreadsheet(self, tail): 
        #Open excel spreadsheet
        self.wb = openpyxl.load_workbook(tail)
        self.sheet = self.wb['Sheet1']

        #Return data from excel spreadsheet 
        for rowOfCellObjects in self.sheet[self.cf.get():self.ct.get()]:

            #Loop through data
            for link in rowOfCellObjects:

                #Remove www and firstlightplus.com text
                self.cleanURL = link.value.replace("www.", " ").replace(".firstlightplus.com", "")
                print(self.cleanURL)

    def validate(self, *args):
        #Retrieve the value from the entry and store it to a variable
        if self.cf.get() and self.ct.get() and self.label["text"]:
            print("normal")
            self.submitBtn.config(state='normal')
        else:
            print("disabled")
            self.submitBtn.config(state='disabled')

root = Root()
root.mainloop()
python excel user-interface tkinter label
1个回答
0
投票

我相信问题是validate函数可以在openFileDialog函数之前调用。这样,就可以在创建label属性之前对其进行访问。

一种简单的解决方案是在displayForm函数中初始化属性:

def displayForm(self):
    #Display label frame
    self.labelFrame = ttk.LabelFrame(self, text = "Open Excel File")
    self.labelFrame.grid(column=1, row=2, pady=5, sticky=NW)
    self.label = None

    # ... Rest of the code

然后,在访问属性之前,测试它是否存在:

def validate(self, *args):
    #Retrieve the value from the entry and store it to a variable
    if self.cf.get() and self.ct.get() and self.label and self.label["text"]:
        print("normal")
        self.submitBtn.config(state='normal')
    else:
        print("disabled")
        self.submitBtn.config(state='disabled')
© www.soinside.com 2019 - 2024. All rights reserved.