Python 3 Tkinter-如何强制使用默认格式
我正在编写我的第一个Python tkinter应用程序 应用程序本身是一个xml编辑器。它将查找2个元素,并更新元素的文本值。下面的代码是概念证明,实际上还没有更新任何内容Python 3 Tkinter-如何强制使用默认格式,python,tkinter,Python,Tkinter,我正在编写我的第一个Python tkinter应用程序 应用程序本身是一个xml编辑器。它将查找2个元素,并更新元素的文本值。下面的代码是概念证明,实际上还没有更新任何内容 #!/usr/bin/env python from tkinter import * from tkinter import messagebox import xml.etree.ElementTree as ET class NameDropper(Frame): def __init__(self,
#!/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()
我的问题是,有没有办法屏蔽条目
字段,使它们自动且一致地遵守特定格式
目标是使两个标签自动遵循格式xx:yy:zz;nn
一年前我曾用Java构建过这个应用程序,但新的需求使我不再使用Java
去年八月关于Java版本的原始问题在这里
我还没有找到任何关于强制执行格式的文档条目小部件中没有任何内置的东西可以做到这一点。所有的基本构建块都可以用来完成这项工作,但大部分工作都是你自己完成的 一个简单的解决方案是使用四个条目小部件(用于xx、yy、zz和nn)和三个标签(用于冒号)。要获得fancier,您可以设置自定义绑定,以便在用户键入时自动插入冒号
您还可以使用entry widget验证功能简单地拒绝任何不能生成正确格式字符串的字符 在表格中,有一个适用于此处的验证想法;使用正则表达式检查输入是否符合某些条件。如果输入的数据与您选择的给定格式不匹配,只需拒绝提交,并向用户发送一条有用的消息
import re
start_time = re.compile(r'^(([01]\d|2[0-3]):([0-5]\d)|24:00)$')
duration = re.compile('[0-9]{2}:[0-9]{2}:[0-9]{2};[0-5]{1}[0-9]{1}')
if start_time.match(user_input_var):
add_well_formatted_data()
else:
print('please format the data accordingly: xx,yy,zz,nn')
if duration.match(user_input_var):
add_well_formatted_data()
else:
print('please format the data accordingly: xx,yy,zz,nn')
或者,您不需要正则表达式,因为datetime类中有格式验证器