2017-08-05 32 views
-1

我试图用.get()获取par02_1。我已经成功地编写了.txt文件的其余部分,但我的程序并没有抓住我的GUI入口线。我猜这与联想自我和可滚动部分等有关,但我无法追踪这一个。任何帮助表示赞赏。在tkinter中使用.get()ScrolledFrame

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

您正在尝试写出__init__方法中的值 - 不这样做 - 您的实例甚至在此时未初始化。创建另一种方法(以及调用或运行它的方法),它将在填写GUI条目后将文件写出*。 – Gerrat

+0

“_configure_canvas”和“_configure_interior”和“muser”缩进了一个额外的级别,还是粘贴代码时出现错误? –

+0

对不起,很多工作是从其他在线的例子,这是我的第一个程序/ python的经验,所以我不知道文件中的所有语法。我知道muser命令必须缩进以显示gui中我想要的位置。 –

回答

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