在tkinter ScrolledFrame中使用.get()

时间:2017-08-05 16:15:53

标签: python tkinter

我正在尝试使用.get()来获取par02_1。我成功编写了.txt文件的其余部分,但我的程序并没有抓住我的gui入口行。我猜这与关联self和可滚动部分等有关,但我无法跟踪这个。任何帮助表示赞赏。

from tkinter import *
from tkinter import ttk
import tkinter.messagebox
import time

root = Tk()

# GUI Window
root.title("Outfile Automation")


# Gui Future Menu Logic
def future01():
    print("Future Command 01")


# GUI Main Menu
menu = Menu(root)
root.config(menu=menu)

subMenu = Menu(menu)
menu.add_cascade(label="File", menu=subMenu)
subMenu.add_command(label="New Script...", command=future01)
subMenu.add_separator()
subMenu.add_command(label="Exit Program", command=future01)

helpMenu = Menu(menu)
menu.add_cascade(label="Help", menu=helpMenu, command=future01)
helpMenu.add_command(label="Instruction Manual", command=future01)
helpMenu.add_command(label="Software Version: A0.003")


##Scrollbar

class VerticalScrolledFrame(Frame):
    def __init__(self, parent, *args, **kw):
        Frame.__init__(self, parent, *args, **kw)

        # create a canvas object and a vertical scrollbar for scrolling it
        vscrollbar = Scrollbar(self, orient=VERTICAL)
        vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
        canvas = Canvas(self, bd=0, highlightthickness=0,
                        yscrollcommand=vscrollbar.set)
        canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
        vscrollbar.config(command=canvas.yview)

        # reset the view
        canvas.xview_moveto(0)
        canvas.yview_moveto(0)

        # create a frame inside the canvas which will be scrolled with it
        self.interior = interior = Frame(canvas)
        interior_id = canvas.create_window(0, 0, window=interior,
                                           anchor=NW)

        # track changes to the canvas and frame width and sync them,
        # also updating the scrollbar
        def _configure_interior(event):
            # update the scrollbars to match the size of the inner frame
            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
            canvas.config(scrollregion="0 0 %s %s" % size)
            if interior.winfo_reqwidth() != canvas.winfo_width():
                # update the canvas's width to fit the inner frame
                canvas.config(width=interior.winfo_reqwidth())

        interior.bind('<Configure>', _configure_interior)

        def _configure_canvas(event):
            if interior.winfo_reqwidth() != canvas.winfo_width():
                # update the inner frame's width to fill the canvas
                canvas.itemconfigure(interior_id, width=canvas.winfo_width())

        canvas.bind('<Configure>', _configure_canvas)


if __name__ == "__main__":
    class AutoApp(Tk):
        def __init__(self, *args, **kwargs):
            root = Tk.__init__(self, *args, **kwargs)

            self.frame = VerticalScrolledFrame(root)
            self.frame.pack()
            self.label = Label(text="")
            self.label.pack()

            self.par02_1 = StringVar()

            title_1 = Label(self.frame.interior, text="Device IP (DHCP)", fg="blue", font="Verdana 10 underline")
            title_1.pack()
            label_1 = Label(self.frame.interior, text="Device 01")
            label_1.pack()
            entry_1 = Entry(self.frame.interior, textvariable=self.par02_1)
            entry_1.pack()

            outFile = open('CSC.txt', 'wt')
            outFile.write("[Script Header]\nDebugStrings=on\nAbortOnError=on\nConcurrentSectionLimit=230\n"
                          "//23 Devices if necessary""\n\n[Variables]""\n"
                          + (self.par02_1.get()) + "\n\n"
                          "[Device01]\nConnect=tcp |proc01|\nRunAsSingleTransaction=on\nEthernetDHCPHost "
                          + (self.par02_1.get()) + "EthernetCurrentConnectionInfo\n")

            outFile.close()

            def muser():
                feedback_1 = Label(root, text="Creating Script...").pack()
                feedback_2 = Label(root, text="Script Complete!").pack()
                time.sleep(2)
                return

            # GUI Buttons
            mbutton = Button(root, text="Create Script", command=muser, fg="black", bg='green')
            mbutton.pack()


    app = AutoApp()
    app.mainloop()

1 个答案:

答案 0 :(得分:0)

您好,感谢您的指导,因为我学习了正确的语法。我还有很长的路要走,但你们两个都帮我指明了正确的方向,所以我可以在线获取我的程序。我将其简化为基础知识,并将在我的实际代码中实现以下架构的变体。

from tkinter import *
from tkinter import ttk
import tkinter.messagebox
import time

root = Tk()

# GUI Window
root.title("Outfile Automation")


# Gui Future Menu Logic
def future01():
    print("Future Command 01")


# GUI Main Menu
menu = Menu(root)
root.config(menu=menu)

subMenu = Menu(menu)
menu.add_cascade(label="File", menu=subMenu)
subMenu.add_command(label="New Script...", command=future01)
subMenu.add_separator()
subMenu.add_command(label="Exit Program", command=future01)

helpMenu = Menu(menu)
menu.add_cascade(label="Help", menu=helpMenu, command=future01)
helpMenu.add_command(label="Instruction Manual", command=future01)
helpMenu.add_command(label="Software Version: A0.003")

par02_1 = StringVar()

title_1 = Label(root, text="Device IP (DHCP)", fg="blue", font="Verdana 10 underline")
title_1.pack()
label_1 = Label(root, text="Device 01")
label_1.pack()
entry_1 = Entry(root, textvariable=par02_1)
entry_1.pack()


root.mainloop()

template = """[Script Header]\nDebugStrings=on\nAbortOnError=on\nConcurrentSectionLimit=230\n//23 Devices if necessary
                \n\n[Variables]\n{}\n\n[Device01]\nConnect=tcp |proc01|\nRunAsSingleTransaction=on\nEthernetDHCPHost\nEthernetCurrentConnectionInfo\n"""


outFile = open('CSC.txt', 'wt')
outFile.write(template.format(par02_1.get()).rstrip())

outFile.close()

root.mainloop()