【发布时间】:2023-01-13 00:51:41
【问题描述】:
我正在构建一个 GUI 来写入 excel 电子表格。但是,在我写入电子表格之前,用户将在 GUI 中输入数据。我想要做的是,当用户在第一个条目中输入版本号并在下一个条目中输入“制表符”时,我希望自动填充日期。
import tkinter
from tkinter import ttk
from tkinter import messagebox
import os
import openpyxl
from datetime import datetime
window = tkinter.Tk()
window.title("Truck Log Entry Form")
frame = tkinter.Frame(window)
frame.pack()
#saving truck logs
truck_info_frame = tkinter.LabelFrame(frame, text="Truck Information")
truck_info_frame.grid(row= 0, column=0, padx=20, pady=10)
release_number_label = tkinter.Label(truck_info_frame, text="Release Number")
release_number_label.grid(row=0,column=0)
truck_name_label = tkinter.Label(truck_info_frame, text="Truck Name")
truck_name_label.grid(row=0, column=1)
tare_info_label = tkinter.Label(truck_info_frame, text="Tare Weight")
tare_info_label.grid(row=0, column=2)
date_info_label = tkinter.Label(truck_info_frame, text="Date/Time")
date_info_label.grid(row=0, column=3)
gross_info_label = tkinter.Label(truck_info_frame, text = "Gross Weight")
gross_info_label.grid(row=0, column=4)
date_info_result_str = tkinter.StringVar()
release_number_entry = tkinter.Entry(truck_info_frame, textvariable=date_info_result_str)
truck_name_entry = tkinter.Entry(truck_info_frame)
tare_info_entry = tkinter.Entry(truck_info_frame)
#date_info_result = tkinter.Label(truck_info_frame, text='')
date_info_result = tkinter.Label(truck_info_frame)
date_info_result.grid(row=1, column=3)
date_info_result_str.trace('w', lambda *args: auto_date(release_number_entry.get()) )
release_number_entry.grid(row=1, column=0)
truck_name_entry.grid(row=1, column=1)
tare_info_entry.grid(row=1, column=2)
for widget in truck_info_frame.winfo_children():
widget.grid_configure(padx=10, pady=5)
def auto_date(release_filled):
print("in auto_date function " + release_filled)
#release_filled = release_number_entry.get()
if len(release_filled) >= 6:
print("in len area")
#datetime object containing current date and time
now = datetime.now()
#format date and time to dd/mm/YY H:M:S
dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
return dt_string
else:
print("made in error")
#tkinter.messagebox.showwarning(title="Error", message="Please check release number")
window.mainloop()
我创建了一个要调用的函数,然后尝试执行 .trace 方法,但这似乎不起作用。此外,我尝试搞乱验证,但它只返回 true 或 false,我不确定如何得到它,我想调用另一个函数来显示 data_info_label 下的时间。我将不胜感激任何帮助。
更新(23 年 1 月 12 日):我能够调用该函数并使其成功跟踪,但如何将日期和时间从函数返回到标签中?
【问题讨论】:
-
.trace('1', auto_date(...) )有两个问题。首先.trace的第一个参数应该是"w"。其次,它应该是lambda: auto_date(...)而不仅仅是auto_date(...)- 查看here 了解更多信息。 -
所以我将其修改为您建议的内容,但现在它甚至不再调用该函数,我查看了您给我的链接。这是一个按钮,我不希望按钮作为因果关系,而是当我跳出输入框转到下一个输入框时。然而,这是一个好的开始,但出于某种原因,在我退出后它没有调用该功能。
-
我链接的问题有同样的问题,当
tkinter需要一个函数时,你不能预先调用该函数。在这两种情况下,您都需要lambda: auto_date(...)而不是auto_date(...)。另外date_info_result_str没有链接到任何东西。请看一些tkinter教程。 -
我不想事先打电话给它。我试图在填写“发布编号”框后调用它,以便我可以自动填充日期/时间标签。
标签: python validation tkinter widget