使用打开的文件名更新状态栏

时间:2016-01-11 15:05:44

标签: python tkinter executable statusbar g-code

在其他stackoverflow用户的帮助下,我已经制作了这段代码,用于从gcode文件中读出一些数据并对其进行一些计算。它差不多完成了,我遇到的最后两件事是:

1)我希望状态栏更新显示消息"文件[上传文件的名称]已上传"使用按钮上传gcode文件后。

2)我想为程序制作可执行文件,因此它可以是独立的,可以在Mac OS和Windows上运行。我已经下载并安装了(我在Mac上)pyinstaller,我正在我的.py文件上执行一些操作,最终结果看起来像现成的应用程序,但它们不起作用。

提前感谢您的帮助和所有输入,我是python中的一个完整的新手,但我已经从你那里学到了很多东西。

这是测试的示例gcode文件:sample GCODE

这是代码:

from tkinter import *
import re
from tkinter import messagebox
from tkinter import filedialog

# Here, we are creating our class, Window, and inheriting from the Frame
# class. Frame is a class from the tkinter module. (see Lib/tkinter/__init__)
class Window(Frame):

    # Define settings upon initialization. Here you can specify
    def __init__(self, master=None):

        # parameters that you want to send through the Frame class. 
        Frame.__init__(self, master)   

        #reference to the master widget, which is the tk window                 
        self.master = master

        #with that, we want to then run init_window, which doesn't yet exist
        self.init_window()

    # Load the gcode file in and extract the filament value
    def get_filament_value(self, fileName):
        with open(fileName, 'r') as f_gcode:
            data = f_gcode.read()
            re_value = re.search('filament used = .*? \(([0-9.]+)', data)

            if re_value:
                return float(re_value.group(1))

            else:
                return 0.0


    def read_gcode(self):
        root.fileName = filedialog.askopenfilename(filetypes = (("GCODE files", "*.gcode"), ("All files", "*.*")))

        volume = self.get_filament_value(root.fileName)
        mass = volume * 1.13
        price = mass * 0.175

        self.volume_text.set('Volume is {:.2f} cm3'.format(volume))
        self.mass_text.set('Mass is {:.2f} g'.format(mass))
        self.price_text.set('Price is {:.2f} DKK'.format(price))

    def client_exit(self):
        exit()

    def about_popup(self):
        messagebox.showinfo("About", "This software is created by Bartosz Domagalski and helps to find used filament parameters from Sli3er generated GCODE")

    #Creation of init_window
    def init_window(self):

        # changing the title of our master widget      
        self.master.title("Filament Data")

        # allowing the widget to take the full space of the root window
        self.pack(fill=BOTH, expand=1)

        # creating a menu instance
        menu = Menu(self.master)
        self.master.config(menu=menu)

        # create the file object)
        file = Menu(menu)
        help = Menu(menu)

        # adds a command to the menu option, calling it exit, and the
        # command it runs on event is client_exit
        file.add_command(label="Exit", command=self.client_exit)
        help.add_command(label="About", command=self.about_popup)

        #added "file" to our menu
        menu.add_cascade(label="File", menu=file)
        menu.add_cascade(label="Help", menu=help)


        #Creating the labels
        l_instruction = Label(self, justify=CENTER, compound=TOP, text="Load GCODE file to find volume, \n weight and price of used filament.")
        l_instruction.pack()


        #Creating the button
        gcodeButton = Button(self, text="Load GCODE", command=self.read_gcode)
        gcodeButton.pack()
#        gcodeButton.place(x=60, y=50)

        #Label of the used filament

        l1 = Label(self, text="")
        l1.pack()
        l2 = Label(self, text="")
        l2.pack()
        l3 = Label(self, text="")
        l3.pack()

        self.volume_text = StringVar()
        l = Label(self, justify=CENTER, compound=BOTTOM, textvariable=self.volume_text)
        l.pack()

        l4 = Label(self, text="")
        l4.pack()

        self.mass_text = StringVar()
        m = Label(self, justify=CENTER, compound=BOTTOM, textvariable=self.mass_text)
        m.pack()

        l5 = Label(self, text="")
        l5.pack()

        self.price_text = StringVar()
        p = Label(self, justify=CENTER, compound=BOTTOM, textvariable=self.price_text)
        p.pack()


        #status Bar
        status = Label(self, text="Waiting for file... ", bd=1, relief=SUNKEN, anchor=W)
        status.pack(side=BOTTOM, fill=X)

# root window created. Here, that would be the only window, but you can later have windows within windows.
root = Tk()
root.resizable(width=False,height=False);
root.geometry("220x300")


#creation of an instance
app = Window(root)

#mainloop 
root.mainloop()

0 个答案:

没有答案