When I am trying to run my program based off a sample Tkinter GUI, nothing happens. I am still new to Pydev, but I find this rather unusual. I have a Main.py file containing the code, and I try to simply run the module without any success.
I simply copy/pasted from this reference,
# Main.py
import tkinter as tk;
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
self.create_widgets()
def create_widgets(self):
self.hi_there = tk.Button(self)
self.hi_there["text"] = "Hello World\n(click me)"
self.hi_there["command"] = self.say_hi
self.hi_there.pack(side="top")
self.quit = tk.Button(self, text="QUIT", fg="red",
command=root.destroy)
self.quit.pack(side="bottom")
def say_hi(self):
print("hi there, everyone!")
root = tk.Tk()
app = Application(master=root)
app.mainloop()
The only result of running the module is an empty Liclipse console dedicated to Main.py. I have also tried other examples from other sites with no luck. Also, I am currently on MacOS if it matters.
Are you sure you have everything properly (working directory, python path...) configured in Liclipse? I have just tried in a fresh install and, after configuring Liclipse to run the current project in Python 3.6 and after selecting the main project file as being this source code, it runs and shows a window with a button, as intended, and it also prints the text to console.
Also, it does not feel very "pythonic" to initialize a button that way. I would rather suggest like this:
# Main.py
import tkinter as tk;
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
self.create_widgets()
def create_widgets(self):
mytext = "Hello World\n(click me)"
self.hi_there = tk.Button(self, text=mytext, command=self.say_hi)
self.hi_there.pack(side="top")
self.quit = tk.Button(self, text="QUIT", fg="red", command=root.destroy)
self.quit.pack(side="bottom")
def say_hi(self):
print("hi there, everyone!")
root = tk.Tk()
app = Application(master=root)
app.mainloop()
The code looks a little more readable and works in the same way. When you start growing your interface, it will be many lines long and by reducing two lines at each button, you can make it a lot shorter. I have been coding a tkinter app with more that 1500 lines of code and at that point I promised myself that I would try to learn how to keep it more organized and short ;)