Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3 Tkinter-如何强制使用默认格式_Python_Tkinter - Fatal编程技术网

Python 3 Tkinter-如何强制使用默认格式

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,

我正在编写我的第一个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,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类中有格式验证器