-1

This is my first run at python and i am by no means a code writer. I have a project that I needed to write a GUI to command the arduino and after much googling and piecing together code I made this program which works perfectly when ran from IDLE. When I launch it from windows (double click it) or from linux (via command line python3 filler.py) it opens and closes like there is an error. I can launch other python programs by same methods with no problems. Where as its not an issue to launch it out of IDLE to make the hardware operate I just cant give up as I would like to get more knowledgeable with python for future projects. Any help would be greatly appreciated.

import tkinter as tk
import serial as s
import time as t
from tkinter import *



class Action:
    def __init__(self):


        def on():
            ser.write(b'7')

        def exit():
            ser.close() # close serial port
            quit()

        self.window = Tk()
        self.window.title("Moore Speciality Brewing")
        self.window.geometry('640x480')
        self.lbl = Label(self.window, text="Can Filler",fg='black',font=(None, 15))
        self.lbl.place(relx=0.24, rely=0.10, height=50, width=350)
        bo = Button(self.window, text="Fill Can", width=10 ,bg='red' ,command=on)
        bo.place(relx=0.34, rely=0.30, height=40, width=200)
        ext = Button(self.window, text="Exit", width=10, bg='white', command=exit)
        ext.place(relx=0.34, rely=0.50, height=40, width=200)

class Prompt(tk.Tk):
    def __init__(self):
        global comm
        comm = None               
        tk.Tk.__init__(self)
        self.geometry('640x480')
        self.label = tk.Label(self, text="Comm Port",fg='black',font=(None, 15))
        self.entry = tk.Entry(self)
        self.button = tk.Button(self, text="Get", command=self.on_button)

        self.entry.place(relx=.5, rely=.5,anchor="center" )
        self.label.place(relx=.5, rely=.44,anchor="center")
        self.button.place(relx=.5, rely=.56,anchor="center")

    def on_button(self):
        comm = self.entry.get()
        global ser
        ser = s.Serial(comm, 9600, timeout=0)   # check your com port
        t.sleep(2)
        Action()
        self.destroy()

Prompt()
Senoird
  • 13
  • 1
  • 4

2 Answers2

0

you have already imported time in your code. just use t.sleep(60) at the end of your code to make the cli wait for you to see if there is an error and let you debug.

at the end Prompt() is not correct. use something like this:

myPrompt = Prompt()
myPrompt.mainloop() 

this part actualy calls the tkinter gui.

0

You need to call the mainloop.
Remove the call to Prompt() (last line) and substitute it with something like this (at the bottom of the script):

if __name__ == "__main__":
    prm = Prompt()
    prm.mainloop()

Here more on tkinter mainloop

Valentino
  • 7,291
  • 6
  • 18
  • 34