0

I am doing GUI in tkinter using python 2.7, this is my first time and i can't seem to make the code work - the COMPARE button doesn't do anything, it's suppose to display something in label5. Also, some processes runs in another file (data loading & processing).

from Tkinter import *
import ttk
import tkMessageBox

class GUI:

    core = None
    root = None

    ctr = 0

    def __init__(self, r):
        self.root = r
        self.root.title("")
        self.root.protocol("WM_DELETE_WINDOW", self.quit)
        self.root.minsize(550, 550)

    def set_core(self, c):
        # set the core object
        self.core = c

    def init(self):
        # string assigned to label that gets changed
        self.processing = StringVar()
        self.processing.set(".")

        # create label and assign above processing string, pack it
        self.label = ttk.Label(self.root, textvariable=self.processing)
        self.label.pack()

        self.label2 = Label(self.root, text="", pady = 40)
        self.label2.pack()
        self.label3 = Label(self.root, text="Please enter ", pady = 5)
        self.label3.pack()


        self.pc = StringVar(None)
        self.pCode = Entry(self.root,textvariable = self.pcode, width = 15)
        self.pCode.pack()
        self.key = self.pCode.get()           

        self.button1 = Button(self.root, text='COMPARE', width = 8, pady = 5, command = self.do_compare)
        self.button1.pack()


        self.var5 = StringVar()
        self.label5 = Label(self.root, textvariable=self.var5, pady = 70)
        self.var5.set("Result here...")
        self.label5.pack()

        self.button2 = Button(self.root, text='CLEAR ALL', width = 8, command = self.clear)
        self.button2.pack()

        self.button3 = Button(self.root, text='QUIT', width = 8, command = self.quit)
        self.button3.pack()


        # create button to start the core thread doing work, pack it
        # self.button = ttk.Button(self.root, text="Do work", command=self.do_work)
        # self.button.pack()

        # create another button that can be clicked when doing work, pack it
        # self.button_2 = ttk.Button(self.root, text=str(self.ctr), command=self.inc_ctr)
        # self.button_2.pack()

    def do_compare(self):
        result = ""
        if len(self.key) ==5 or len(self.key) 6:
            result =self.do_work()
            self.var5.set(result)
        else:
            result = 'Invalid Entry, please enter 5-6 alpha numeric characters... !'                        
            self.var5.set(result)

    def quit(self):
        # our quit method to ensure we wait for the core thread to close first
        if not self.core.processing:
            self.core.running = False
            self.root.quit()

    # call back method for button
    def do_work(self):
        self.core.process_request()

    # call back method for clear button
    def clear(self):
        self.var5.set("Result will be here...")
        self.pc.set("")

1 Answer 1

1

The do_compare() method is returning result, but that return isn't going anywhere. Just set the Label's textvariable to the variable result, and it will update. You also don't need that bind method in there, that's not doing anything. Here's an example of what I'm talking about:

root = Tk()

def change_var():     # function to get 'result'
    var.set('Result') # set var to 'result'

var = StringVar()                     # create var
var.set('Empty Label')                # set var to value
label = Label(root, textvariable=var) # make label to display var
label.pack()

Button(root, text='Change [var]', command=change_var).pack()

root.mainloop()
Sign up to request clarification or add additional context in comments.

5 Comments

thanks a lot atlasologist. that bind is really useless. 'self.var5.set(self.process_request)'
i did the changes as recommended by atlasologist. However, i do get this error - TypeError: do_compare() takes exactly 1 argument (2 given). Hope someone could enlighten me on this.
It means that you are passing an extra argument to do_compare(). If you want to post a new question or make an edit to this question to include the revised code, it'll help to locate the source of the error.
i edited the code to include all the changes including the calling of self.core.process_request from core. i don't exactly get where the extra argument comes from, in the do_compare method. Pls help!
Specifically--how are you calling the do_compare() method.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.