2017-08-05 5 views
-1

.get()を使用してpar02_1を取得しようとしています。私は成功した.txtファイルの残りの部分を書いているが、私のプログラムは私のGUIエントリラインをつかんでいない。私はこれが連想の自己とスクロール可能なセクションなどと関係があると推測していますが、私はこれを追跡することはできません。どんな助けもありがとうございます。tkinter内で.get()を使用するScrollledFrame

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プログラム/経験ですので、ファイル内のすべての構文がわかりません。私はgui内のどこに表示したいのかを表示するには、muserコマンドをインデントしなければならないことを知っています。 –

答えて

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() 
関連する問題