반복적 인 신호 처리 작업의 값을 캡처하기 위해 회사 애플리케이션을 스크립팅하려는 프로젝트를 시작했습니다. 테스트 할 때 다른 매개 변수가 필요한 다른 모듈간에 전환하는 옵션을 포함하고 싶습니다.python : 프레임 내용 변경
왼쪽의 버튼을 클릭하면 데이터 입력 프레임의 내용이 Labels
및 Entry
위젯으로 변경됩니다. '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()
응용 프로그램이 시작됩니다 :
AAA를 누르면 :
들여 쓰기가 잘못되어 어떤 코드가 어떤 기능이나 클래스에 속해 있는지 알 수 없습니다. –