2015-01-08 2 views
1

반복적 인 신호 처리 작업의 값을 캡처하기 위해 회사 애플리케이션을 스크립팅하려는 프로젝트를 시작했습니다. 테스트 할 때 다른 매개 변수가 필요한 다른 모듈간에 전환하는 옵션을 포함하고 싶습니다.python : 프레임 내용 변경

왼쪽의 버튼을 클릭하면 데이터 입력 프레임의 내용이 LabelsEntry 위젯으로 변경됩니다. 'AAA'에 대한 위젯을 다른 클래스에 넣으려고했으나 버튼 클릭으로 클래스를 초기화하는 방법을 모르므로 클래스의 위젯이 생성/표시됩니다. 내가 .lift()로 시도했지만 추한 것입니다. 또한 데이터 입력 프레임 아래에 동일한 2 프레임을 유지하고 오른쪽에 ScrolledText을두고 활성 모듈로 작업하고 싶습니다. 어떤 아이디어? 누군가 나를 올바른 방향으로 밀어 넣을 수 있습니까?

오, 그래, 이건 내 첫 번째 프로젝트는 단순한 읽기 -> 바꾸기 문자열 -> 스크립트.

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import Tkinter as tk 
import json 
import tkFileDialog 
import sys 
import ScrolledText 
from Tkinter import* 


class testlogger(tk.Tk): 
    def __init__(self,parent): 
     tk.Tk.__init__(self,parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     self.grid() 

     #-------------------------------------------------------------------------------------- 

     menubar = tk.Menu(self) 

     filemenu = tk.Menu(menubar, tearoff=0) 
     filemenu.add_command(label="New") 
     filemenu.add_command(label="Open", command=self.load_file) 
     filemenu.add_command(label="Save", command=self.safe_file) 
     filemenu.add_command(label="Save as...") 
     filemenu.add_command(label="Close") 
     filemenu.add_separator() 
     filemenu.add_command(label="Exit", command=self.quit) 
     menubar.add_cascade(label="File", menu=filemenu) 

     editmenu = tk.Menu(menubar, tearoff=0) 
     editmenu.add_command(label="Undo") 
     editmenu.add_separator() 
     editmenu.add_command(label="Cut") 
     editmenu.add_command(label="Copy") 
     editmenu.add_command(label="Paste") 
     editmenu.add_command(label="Delete") 
     editmenu.add_command(label="Select All") 
     menubar.add_cascade(label="Edit", menu=editmenu) 

     helpmenu = tk.Menu(menubar, tearoff=0) 
     helpmenu.add_command(label="Help Index") 
     helpmenu.add_command(label="About...") 
     menubar.add_cascade(label="Help", menu=helpmenu) 

     self.config(menu=menubar) 

     #-------------------------------------------------------------------------------------- 

     treeFrame = tk.Frame(self) 
     treeFrame.grid(column=0, row=1, sticky='NW') 

     b1 = Button(treeFrame, text=u'AAA', command=self.AAAlift) 
     b1.pack(fill='x') 

     b2 = Button(treeFrame, text=u'RADON', command=self.radonlift) 
     b2.pack(fill='x') 

     b3 = Button(treeFrame, text=u'Adaptive Subtract') 
     b3.pack(fill='x') 

     b4 = Button(treeFrame, text=u'GMP') 
     b4.pack(fill='x') 

     #-------------------------------------------------------------------------------------- 
     # 
     # 
     # 
     #-------------------------------------------------------------------------------------- 
     self.enterData = tk.LabelFrame(self, text=" Data Entry ") 
     self.enterData.grid(column=1, row=1, columnspan=4, sticky='NW', \ 
       padx=5, pady=5, ipadx=5, ipady=5) 

     titleAAA = tk.Label(self.enterData, text="AAA") 
     titleAAA.grid(row=1, columnspan=4, sticky='N', padx=5, pady=2) 

     self.freqInput = tk.StringVar() 
     self.freqInput2 = tk.StringVar()  
     self.thresInput = tk.StringVar() 
     self.widthInput = tk.StringVar() 

     self.minFreq = tk.Label(self.enterData, text="Minimum Frequency") 
     self.minFreq.grid(row=2, column=1, sticky='E', padx=5, pady=2) 

     minFreqData = tk.Entry(self.enterData, textvariable=self.freqInput) 
     minFreqData.grid(row=2, column=2, sticky='E', padx=5, pady=2) 

     self.maxFreq = tk.Label(self.enterData, text="Maximum Frequency") 
     self.maxFreq.grid(row=3, column=1, sticky='E', padx=5, pady=2) 

     maxFreqData = tk.Entry(self.enterData, textvariable=self.freqInput2) 
     maxFreqData.grid(row=3, column=2, sticky='E', padx=5, pady=2) 

     self.threshold = tk.Label(self.enterData, text="Threshold") 
     self.threshold.grid(row=2, column=3, sticky='E', padx=5, pady=2) 

     thresData = tk.Entry(self.enterData, textvariable=self.thresInput) 
     thresData.grid(row=2, column=4, sticky='E', padx=5, pady=2) 

     self.width = tk.Label(self.enterData, text="SpatialWidth") 
     self.width.grid(row=3, column=3, sticky='E', padx=5, pady=2) 

     widthData = tk.Entry(self.enterData, textvariable=self.widthInput) 
     widthData.grid(row=3, column=4, sticky='E', padx=5, pady=2) 

     self.valueList = [self.freqInput, self.freqInput2, self.thresInput, self.widthInput] 
     self.labelList = [self.minFreq, self.maxFreq, self.threshold, self.width] 

     enteredAAAData = [] 

     #-------------------------------------------------------------------------------------- 

     self.radon = LabelFrame(self, text=" Data Entry ") 
     self.radon.grid(column=1, row=1, columnspan=4, sticky='NW', \ 
       padx=5, pady=5, ipadx=5, ipady=5) 

     titleRadon = Label(self.radon, text="Radon Fwd Transform") 
     titleRadon.grid(row=1, columnspan=4, sticky='N', padx=5, pady=2) 

     self.minMOInput = StringVar() 
     self.maxMOInput = StringVar()  
     self.offsetInput = StringVar() 
     self.numpInput = StringVar() 
     self.motypeInput = StringVar() 
     self.maxfreqInput = StringVar() 

     self.minMO = Label(self.radon, text="Minimum Moveout") 
     self.minMO.grid(row=2, column=1, sticky='E', padx=5, pady=2) 

     minMOData = Entry(self.radon, textvariable=self.minMOInput) 
     minMOData.grid(row=2, column=2, sticky='E', padx=5, pady=2) 

     self.maxMO = Label(self.radon, text="Maximum Moveout") 
     self.maxFreq.grid(row=3, column=1, sticky='E', padx=5, pady=2) 

     maxMOData = Entry(self.radon, textvariable=self.maxMOInput) 
     maxMOData.grid(row=3, column=2, sticky='E', padx=5, pady=2) 

     self.offset = Label(self.radon, text="Reference Offset") 
     self.offset.grid(row=2, column=3, sticky='E', padx=5, pady=2) 

     offsetData = Entry(self.radon, textvariable=self.offsetInput) 
     offsetData.grid(row=2, column=4, sticky='E', padx=5, pady=2) 

     self.numP = Label(self.radon, text="Number of P-Traces") 
     self.numP.grid(row=3, column=3, sticky='E', padx=5, pady=2) 

     numPData = Entry(self.radon, textvariable=self.numpInput) 
     numPData.grid(row=3, column=4, sticky='E', padx=5, pady=2) 

     self.motype = Label(self.radon, text="Moveout Type") 
     self.motype.grid(row=4, column=1, sticky='E', padx=5, pady=2) 

     motypeData = Entry(self.radon, textvariable=self.motypeInput) 
     motypeData.grid(row=4, column=2, sticky='E', padx=5, pady=2) 

     self.maxfreq = Label(self.radon, text="Maximum Frequency") 
     self.maxfreq.grid(row=4, column=3, sticky='E', padx=5, pady=2) 

     maxfreqData = Entry(self.radon, textvariable=self.maxfreqInput) 
     maxfreqData.grid(row=4, column=4, sticky='E', padx=5, pady=2) 

     self.valueList = [self.minMOInput, self.maxMOInput, self.offsetInput, self.numpInput, self.motypeInput, self.maxfreqInput] 
     self.labelList = [self.minMO, self.maxMO, self.offset, self.numP, self.motype, self.maxfreq] 

     enteredRadonData = [] 

     #-------------------------------------------------------------------------------------- 

     evalData = tk.Frame(self) 
     evalData.grid(column=1, row=2, sticky='NW', \ 
       padx=5, pady=5, ipadx=5, ipady=5) 

     evalLabel = tk.Label(evalData, text="Evaluation") 
     evalLabel.grid(row=1, column=1, columnspan=3, sticky='N', padx=5, pady=2) 

     self.eval_state = tk.StringVar() 

     goodRadio = tk.Radiobutton(evalData, text="Good", variable=self.eval_state, value='Good') 
     goodRadio.grid(row=2, column=1, sticky='W', padx=5, pady=2) 

     badRadio = tk.Radiobutton(evalData, text="Bad", variable=self.eval_state, value='Bad') 
     badRadio.grid(row=2, column=2, sticky='W', padx=5, pady=2) 

     sameRadio = tk.Radiobutton(evalData, text="Same", variable=self.eval_state, value='Same') 
     sameRadio.grid(row=2, column=3, sticky='W', padx=5, pady=2) 

     qcDisp = tk.Label(evalData, text="QC Displays:") 
     qcDisp.grid(row=2,column=4, sticky='W', padx=10, pady=2) 

     self.checkB4 = tk.IntVar() 

     optionBefore = tk.Checkbutton(evalData, text="Before", variable=self.checkB4, onvalue=1, offvalue=0) 
     optionBefore.grid(row=1, column=5, sticky='W', padx=5, pady=2) 

     optionAfter = tk.Checkbutton(evalData, text="After", onvalue=1, offvalue=0) 
     optionAfter.grid(row=2, column=5, sticky='W', padx=5, pady=2) 

     optionDiff = tk.Checkbutton(evalData, text="Difference", onvalue=1, offvalue=0) 
     optionDiff.grid(row=3, column=5, sticky='W', padx=5, pady=2) 

     optionSpectrum = tk.Checkbutton(evalData, text="Frequency Spectrum", onvalue=1, offvalue=0) 
     optionSpectrum.grid(row=1, column=6, sticky='W', padx=5, pady=2) 

     optionAuto = tk.Checkbutton(evalData, text="Auto Correlation", onvalue=1, offvalue=0) 
     optionAuto.grid(row=2, column=6, sticky='W', padx=5, pady=2) 

     optionBanana = tk.Checkbutton(evalData, text="I'm a Banana", onvalue=1, offvalue=0) 
     optionBanana.grid(row=3, column=6, sticky='W', padx=5, pady=2) 

     #-------------------------------------------------------------------------------------- 


     self.comment = tk.Text(self, height=5, bg='white') 
     self.comment.grid(column=1, row=3, sticky='NW', \ 
       padx=5, pady=5, ipadx=5, ipady=5) 

     submit_b = tk.Button(self, text=u"Submit", command=self.enter_data) 
     submit_b.grid(column=1, row=4, sticky='NE') 

     #-------------------------------------------------------------------------------------- 

     protocolFrame = tk.LabelFrame(self, text="Protocol") 
     protocolFrame.grid(row=1, column=2, rowspan=3, sticky='NW') 

     self.protocolText = ScrolledText.ScrolledText(protocolFrame,state='disabled',height=30, width=70) 
     self.protocolText.grid(column=0, row=0, sticky='NE') 

     #-------------------------------------------------------------------------------------- 

     self.L = [] 


    #--------------------------------------------------------------------------------------  

    def enter_data(self): 


     x = self.labelList[0].cget('text') 
     y = self.valueList[0].get() 
     self.L.append(x + ': ' + y) 

     x = self.labelList[1].cget('text') 
     y = self.valueList[1].get() 
     self.L.append(x + ': ' + y) 

     x = self.labelList[2].cget('text') 
     y = self.valueList[2].get() 
     self.L.append(x + ': ' + y) 

     x = self.labelList[3].cget('text') 
     y = self.valueList[3].get() 
     self.L.append(x + ': ' + y) 


     x = self.eval_state.get() 
     self.L.append(x) 

     if self.checkB4 == 1: 
      y = self.optionBefore.cget('text') 
      self.L.append(y) 

     x = self.comment.get('1.0','end') 
     self.L.append(x) 
     self.L.append('-------------------------------------\n') 

     self.protocolText.config(state='normal') 
     self.protocolText.insert(tk.END, '\n'.join(self.L)) 
     self.protocolText.config(state='disabled') 

     self.L = [] 

    #------------------------------------------------------------------------------------------ 

    def safe_file(self): 
     s = self.protocolText.get('1.0','end') 
     with open('my_json', 'w') as fp: 
       json.dump(s, fp) 

    def load_file(self): 

     options = {} 
     options['defaultextension'] = '.txt' 
     options['filetypes'] = [('all files', '.*'), ('text files', '.txt')] 
     options['initialdir'] = '/home' 
     options['parent'] = self.parent 
     options['title'] = "Open a file" 
     self.protocolText.config(state='normal') 
     with tkFileDialog.askopenfile(mode='r', **options) as f_handle: 
      for line in f_handle: 
       self.protocolText.insert(tk.END, f_handle) 
     self.protocolText.config(state='disabled') 

    def AAAlift(self): 
     self.enterData.lift() 

    def radonlift(self): 
     self.radon.lift() 

if __name__ == "__main__": 
    app = testlogger(None) 
    app.title('Testlogger') 
    app.mainloop() 

응용 프로그램이 시작됩니다 :

enter image description here

AAA를 누르면 :

enter image description here

+1

들여 쓰기가 잘못되어 어떤 코드가 어떤 기능이나 클래스에 속해 있는지 알 수 없습니다. –

답변

0

내가 약간의 코드를 수정

여기에 코드입니다. 기본적으로 LabelFrames를 래핑하기 위해 containerFrame을 추가했습니다. 이 방법을 더 쉽게 사용하는 것이 더 쉽다고 생각합니다. 다른 곳에서 프로토콜 부분을 인라인으로 만들기 위해 다른 부분에 패딩을 추가했습니다.

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import Tkinter as tk 
import json 
import tkFileDialog 
import sys 
import ScrolledText 
from Tkinter import* 


class testlogger(tk.Tk): 
    def __init__(self,parent): 
     tk.Tk.__init__(self,parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     self.grid() 

     #-------------------------------------------------------------------------------------- 

     menubar = tk.Menu(self) 

     filemenu = tk.Menu(menubar, tearoff=0) 
     filemenu.add_command(label="New") 
     filemenu.add_command(label="Open", command=self.load_file) 
     filemenu.add_command(label="Save", command=self.safe_file) 
     filemenu.add_command(label="Save as...") 
     filemenu.add_command(label="Close") 
     filemenu.add_separator() 
     filemenu.add_command(label="Exit", command=self.quit) 
     menubar.add_cascade(label="File", menu=filemenu) 

     editmenu = tk.Menu(menubar, tearoff=0) 
     editmenu.add_command(label="Undo") 
     editmenu.add_separator() 
     editmenu.add_command(label="Cut") 
     editmenu.add_command(label="Copy") 
     editmenu.add_command(label="Paste") 
     editmenu.add_command(label="Delete") 
     editmenu.add_command(label="Select All") 
     menubar.add_cascade(label="Edit", menu=editmenu) 

     helpmenu = tk.Menu(menubar, tearoff=0) 
     helpmenu.add_command(label="Help Index") 
     helpmenu.add_command(label="About...") 
     menubar.add_cascade(label="Help", menu=helpmenu) 

     self.config(menu=menubar) 

     #-------------------------------------------------------------------------------------- 

     treeFrame = tk.Frame(self) 
     treeFrame.grid(column=0, row=1, sticky='NW') 

     b1 = Button(treeFrame, text=u'AAA', command=self.AAAlift) 
     b1.pack(fill='x') 

     b2 = Button(treeFrame, text=u'RADON', command=self.radonlift) 
     b2.pack(fill='x') 

     b3 = Button(treeFrame, text=u'Adaptive Subtract') 
     b3.pack(fill='x') 

     b4 = Button(treeFrame, text=u'GMP') 
     b4.pack(fill='x') 

     #-------------------------------------------------------------------------------------- 
     # 
     # 
     # 
     #-------------------------------------------------------------------------------------- 

     self.containerFrame = tk.Frame(self) 
     self.containerFrame.grid(column=1, row=1, columnspan=4, sticky='NW', \ 
             padx=5, pady=5, ipadx=1, ipady=1) 

     self.enterData = tk.LabelFrame(self.containerFrame, text=" Data Entry ") 
     #self.enterData.pack(fill=tk.BOTH, expand=1)   
     self.enterData.grid(column=0, row=0, sticky='NW', ipadx=17) 

#   self.enterData.grid(column=1, row=1, columnspan=4, sticky='NW', \ 
#     padx=5, pady=5, ipadx=5, ipady=5) 

     titleAAA = tk.Label(self.enterData, text="AAA") 
     titleAAA.grid(row=1, columnspan=4, sticky='N', padx=5, pady=2) 

     self.freqInput = tk.StringVar() 
     self.freqInput2 = tk.StringVar()  
     self.thresInput = tk.StringVar() 
     self.widthInput = tk.StringVar() 

     self.minFreq = tk.Label(self.enterData, text="Minimum Frequency") 
     self.minFreq.grid(row=2, column=1, sticky='E', padx=5, pady=2) 

     minFreqData = tk.Entry(self.enterData, textvariable=self.freqInput) 
     minFreqData.grid(row=2, column=2, sticky='E', padx=5, pady=2) 

     self.maxFreq = tk.Label(self.enterData, text="Maximum Frequency") 
     self.maxFreq.grid(row=3, column=1, sticky='E', padx=5, pady=2) 

     maxFreqData = tk.Entry(self.enterData, textvariable=self.freqInput2) 
     maxFreqData.grid(row=3, column=2, sticky='E', padx=5, pady=2) 

     self.threshold = tk.Label(self.enterData, text="Threshold") 
     self.threshold.grid(row=2, column=3, sticky='E', padx=5, pady=2) 

     thresData = tk.Entry(self.enterData, textvariable=self.thresInput) 
     thresData.grid(row=2, column=4, sticky='E', padx=5, pady=2) 

     self.width = tk.Label(self.enterData, text="SpatialWidth") 
     self.width.grid(row=3, column=3, sticky='E', padx=5, pady=2) 

     widthData = tk.Entry(self.enterData, textvariable=self.widthInput) 
     widthData.grid(row=3, column=4, sticky='E', padx=5, pady=2) 

     self.valueList = [self.freqInput, self.freqInput2, self.thresInput, self.widthInput] 
     self.labelList = [self.minFreq, self.maxFreq, self.threshold, self.width] 

     enteredAAAData = [] 

     #-------------------------------------------------------------------------------------- 



     self.radon = LabelFrame(self.containerFrame, text=" Data Entry ") 
     #self.radon.pack(fill=tk.BOTH, expand=1) 
     self.radon.grid(column=0, row=0, sticky='NW', ipadx=0)  

     titleRadon = Label(self.radon, text="Radon Fwd Transform") 
     titleRadon.grid(row=1, columnspan=4, sticky='N', padx=5, pady=2) 

     self.minMOInput = StringVar() 
     self.maxMOInput = StringVar()  
     self.offsetInput = StringVar() 
     self.numpInput = StringVar() 
     self.motypeInput = StringVar() 
     self.maxfreqInput = StringVar() 

     self.minMO = Label(self.radon, text="Minimum Moveout") 
     self.minMO.grid(row=2, column=1, sticky='E', padx=5, pady=2) 

     minMOData = Entry(self.radon, textvariable=self.minMOInput) 
     minMOData.grid(row=2, column=2, sticky='E', padx=5, pady=2) 

     self.maxMO = Label(self.radon, text="Maximum Moveout") 
     self.maxFreq.grid(row=3, column=1, sticky='E', padx=5, pady=2) 

     maxMOData = Entry(self.radon, textvariable=self.maxMOInput) 
     maxMOData.grid(row=3, column=2, sticky='E', padx=5, pady=2) 

     self.offset = Label(self.radon, text="Reference Offset") 
     self.offset.grid(row=2, column=3, sticky='E', padx=5, pady=2) 

     offsetData = Entry(self.radon, textvariable=self.offsetInput) 
     offsetData.grid(row=2, column=4, sticky='E', padx=5, pady=2) 

     self.numP = Label(self.radon, text="Number of P-Traces") 
     self.numP.grid(row=3, column=3, sticky='E', padx=5, pady=2) 

     numPData = Entry(self.radon, textvariable=self.numpInput) 
     numPData.grid(row=3, column=4, sticky='E', padx=5, pady=2) 

     self.motype = Label(self.radon, text="Moveout Type") 
     self.motype.grid(row=4, column=1, sticky='E', padx=5, pady=2) 

     motypeData = Entry(self.radon, textvariable=self.motypeInput) 
     motypeData.grid(row=4, column=2, sticky='E', padx=5, pady=2) 

     self.maxfreq = Label(self.radon, text="Maximum Frequency") 
     self.maxfreq.grid(row=4, column=3, sticky='E', padx=5, pady=2) 

     maxfreqData = Entry(self.radon, textvariable=self.maxfreqInput) 
     maxfreqData.grid(row=4, column=4, sticky='E', padx=5, pady=2) 

     self.valueList = [self.minMOInput, self.maxMOInput, self.offsetInput, self.numpInput, self.motypeInput, self.maxfreqInput] 
     self.labelList = [self.minMO, self.maxMO, self.offset, self.numP, self.motype, self.maxfreq] 

     enteredRadonData = [] 

     #-------------------------------------------------------------------------------------- 

     evalData = tk.Frame(self) 
     evalData.grid(column=1, row=2, sticky='NW', \ 
       padx=5, pady=5, ipadx=5, ipady=5) 

     evalLabel = tk.Label(evalData, text="Evaluation") 
     evalLabel.grid(row=1, column=1, columnspan=3, sticky='N', padx=5, pady=2) 

     self.eval_state = tk.StringVar() 

     goodRadio = tk.Radiobutton(evalData, text="Good", variable=self.eval_state, value='Good') 
     goodRadio.grid(row=2, column=1, sticky='W', padx=5, pady=2) 

     badRadio = tk.Radiobutton(evalData, text="Bad", variable=self.eval_state, value='Bad') 
     badRadio.grid(row=2, column=2, sticky='W', padx=5, pady=2) 

     sameRadio = tk.Radiobutton(evalData, text="Same", variable=self.eval_state, value='Same') 
     sameRadio.grid(row=2, column=3, sticky='W', padx=5, pady=2) 

     qcDisp = tk.Label(evalData, text="QC Displays:") 
     qcDisp.grid(row=2,column=4, sticky='W', padx=10, pady=2) 

     self.checkB4 = tk.IntVar() 

     optionBefore = tk.Checkbutton(evalData, text="Before", variable=self.checkB4, onvalue=1, offvalue=0) 
     optionBefore.grid(row=1, column=5, sticky='W', padx=5, pady=2) 

     optionAfter = tk.Checkbutton(evalData, text="After", onvalue=1, offvalue=0) 
     optionAfter.grid(row=2, column=5, sticky='W', padx=5, pady=2) 

     optionDiff = tk.Checkbutton(evalData, text="Difference", onvalue=1, offvalue=0) 
     optionDiff.grid(row=3, column=5, sticky='W', padx=5, pady=2) 

     optionSpectrum = tk.Checkbutton(evalData, text="Frequency Spectrum", onvalue=1, offvalue=0) 
     optionSpectrum.grid(row=1, column=6, sticky='W', padx=5, pady=2) 

     optionAuto = tk.Checkbutton(evalData, text="Auto Correlation", onvalue=1, offvalue=0) 
     optionAuto.grid(row=2, column=6, sticky='W', padx=5, pady=2) 

     optionBanana = tk.Checkbutton(evalData, text="I'm a Banana", onvalue=1, offvalue=0) 
     optionBanana.grid(row=3, column=6, sticky='W', padx=5, pady=2) 

     #-------------------------------------------------------------------------------------- 


     self.comment = tk.Text(self, height=5, bg='white') 
     self.comment.grid(column=1, row=3, sticky='NW', \ 
          padx=5, pady=5, ipadx=5, ipady=5) 

     submit_b = tk.Button(self, text=u"Submit", command=self.enter_data) 
     submit_b.grid(column=1, row=4, sticky='NE') 

     #-------------------------------------------------------------------------------------- 

     protocolFrame = tk.LabelFrame(self, text="Protocol") 
     protocolFrame.grid(row=1, column=2, padx=45, pady=5, rowspan=3, sticky='NW') 

     self.protocolText = ScrolledText.ScrolledText(protocolFrame,state='disabled',height=30, width=70) 
     self.protocolText.grid(column=0, row=0, sticky='NE') 

     #-------------------------------------------------------------------------------------- 

     self.L = [] 


    #--------------------------------------------------------------------------------------  

    def enter_data(self): 


     x = self.labelList[0].cget('text') 
     y = self.valueList[0].get() 
     self.L.append(x + ': ' + y) 

     x = self.labelList[1].cget('text') 
     y = self.valueList[1].get() 
     self.L.append(x + ': ' + y) 

     x = self.labelList[2].cget('text') 
     y = self.valueList[2].get() 
     self.L.append(x + ': ' + y) 

     x = self.labelList[3].cget('text') 
     y = self.valueList[3].get() 
     self.L.append(x + ': ' + y) 


     x = self.eval_state.get() 
     self.L.append(x) 

     if self.checkB4 == 1: 
      y = self.optionBefore.cget('text') 
      self.L.append(y) 

     x = self.comment.get('1.0','end') 
     self.L.append(x) 
     self.L.append('-------------------------------------\n') 

     self.protocolText.config(state='normal') 
     self.protocolText.insert(tk.END, '\n'.join(self.L)) 
     self.protocolText.config(state='disabled') 

     self.L = [] 

    #------------------------------------------------------------------------------------------ 

    def safe_file(self): 
     s = self.protocolText.get('1.0','end') 
     with open('my_json', 'w') as fp: 
       json.dump(s, fp) 

    def load_file(self): 

     options = {} 
     options['defaultextension'] = '.txt' 
     options['filetypes'] = [('all files', '.*'), ('text files', '.txt')] 
     options['initialdir'] = '/home' 
     options['parent'] = self.parent 
     options['title'] = "Open a file" 
     self.protocolText.config(state='normal') 
     with tkFileDialog.askopenfile(mode='r', **options) as f_handle: 
      for line in f_handle: 
       self.protocolText.insert(tk.END, f_handle) 
     self.protocolText.config(state='disabled') 

    def AAAlift(self): 
     #self.enterData.grid_forget() 
     self.radon.grid_remove() 
     self.enterData.grid() 

    def radonlift(self): 
     self.enterData.grid_remove() 
     self.radon.grid() 

if __name__ == "__main__": 
    app = testlogger(None) 
    app.title('Testlogger') 
    app.mainloop() 

스크린 샷은 다음과 같습니다

enter image description here enter image description here

분명히 더 많은 작업이 예상 작품으로 "도"모든 것이 서로와 인라인 만 누르면 AAA 및 라돈 버튼을 만들기 위해 필요하다 (I 생각한다). 내 수정 사항을 확장/수정할 수 있으며 원하는대로 효과를 얻을 수 있기를 바랍니다.