2016-03-04 4 views
1

Я пишу свое первое приложение tkinter для Python.Python 3 Tkinter - Как принудительно использовать формат по умолчанию

Приложение само по себе является редактором xml. Он будет искать два элемента и обновлять текстовое значение элемента. Нижеприведенный код является доказательством концепции и на самом деле ничего не обновляет.

#!/usr/bin/env python 

from tkinter import * 
from tkinter import messagebox 
import xml.etree.ElementTree as ET 


class NameDropper(Frame): 

    def __init__(self,fp=None): 
     self.fp = fp 
     #Create the Mainframe 
     root = Tk() 
     root.config(bg="red") 
     root.title("NameDropper") 
     mainframe = Frame(root, colormap="new") 
     #mainframe.config(width=200,height=200,bg="green") 

     # place and configure 
     mainframe.grid(column=0,row=0,sticky=(N,W,E,S)) #makes Frame appear on screen 
     #mainframe.columnconfigure(0, weight=1) 
     #mainframe.rowconfigure(0, weight=1) 

     self.mainframe = mainframe 
     self.createVariables() 
     self.createWidgets() 
     self.gridWidgets() 
     #self.mainframe.pack(fill=BOTH, expand=YES) 

    def createVariables(self): 
     self.start = StringVar() 
     self.duration = StringVar() 

    def createWidgets(self): 
     self.mainframe.startLabel = Label(self.mainframe,text="Start",font=("Helvetica", 16)) 
     self.mainframe.startEntry = Entry(self.mainframe,textvariable=self.start,font=("Helvetica", 16)) 
     # self.mainframe.startLabel.pack(side="left", fill=None, expand=False) 
     self.mainframe.durLabel = Label(self.mainframe,text="Duration",font=("Helvetica", 16)) 
     # self.mainframe.durLabel.pack(side="left", fill=None, expand=False) 
     self.mainframe.durEntry = Entry(self.mainframe,textvariable=self.duration,font=("Helvetica", 16)) 
     self.mainframe.saveButton = Button(self.mainframe, text='Save', command=self.save) 
     self.mainframe.quitButton = Button(self.mainframe,text='Quit',command=self.mainframe.quit) 

    def gridWidgets(self): 
     self.mainframe.startLabel.grid(column=0,row=0,sticky=(N,W)) 
     # self.mainframe.startLabel.config(bg="red") 
     self.mainframe.startEntry.grid(column=1,row=0,sticky=(N,W)) 
     # self.mainframe.startEntry.config(bg="black") 
     self.mainframe.durLabel.grid(column=0,row=1,sticky=(N,W)) 
     self.mainframe.durEntry.grid(column=1,row=1,sticky=(N,W)) 
     self.mainframe.saveButton.grid(column=0,row=3,sticky=SW) 
     self.mainframe.quitButton.grid(column=2,row=3,sticky=SE) 

    def save(self): 
     root = ET.parse(fp).getroot() 
     generic_anc_enable = root.findall('GenericANCEnable') 
     for item in generic_anc_enable: 
      start_element = item.find('StartTimecode') 
      duration_element = item.find('DurationTimecode') 
      start_element.text = str(self.mainframe.startEntry.get()) 
      duration_element.text = str(self.mainframe.durEntry.get()) 


      messagebox.showwarning(start_element.text) 

if __name__ == '__main__' : 
    fp = "C:\\Users\\206420055\\Documents\\VancInsertionLabelTdyShwCrwlTC.xml" 
    app = NameDropper(fp) 

    app.mainframe.mainloop() 

У меня есть вопрос, есть ли способ, чтобы замаскировать Entry поля так, чтобы они автоматически и последовательно соблюдать определенный формат?

enter image description here

Цель будет иметь обе метки автоматически в соответствии с форматом xx:yy:zz;nn

Я уже построил это приложение на Java год назад, но новые требования вызывают меня слезть Java.

Оригинальный вопрос от Последнего августа о версии Java здесь Java - Enforce TextField Format - UX - 00:00:00;00

Я нету еще не удался найти какую-либо документацию на соблюдение формата

ответ

0

Там нет ничего, встроенного в въездном виджет сделай это. Для этого доступны все основные строительные блоки, но вам придется самому выполнять большую часть работы.

Простым решением является использование четырех виджетов ввода (для xx, yy, zz и nn) с тремя метками (для двоеточий). Чтобы получить привязанность, вы можете настроить пользовательские привязки, чтобы автоматически вставлять двоеточия в качестве типов пользователей.

Вы также можете использовать функцию проверки виджета элемента, чтобы просто отказаться от любых символов, которые не приводят к строке в правильном формате.

Смежные вопросы