user3267156
user3267156

Reputation: 13

Graphical User Interface - Tkinter

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("")

Upvotes: 0

Views: 204

Answers (1)

atlasologist
atlasologist

Reputation: 3964

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()

Upvotes: 1

Related Questions