Как мне создать цикл, который последовательно проверяет переменные, чтобы определить источник записи?Python

Программы на Python
Ответить
Anonymous
 Как мне создать цикл, который последовательно проверяет переменные, чтобы определить источник записи?

Сообщение Anonymous »

При создании приложения пользовательской формы, в котором я ввожу информацию о клиенте, я хочу, чтобы информация, которую я вводю в поля ввода, выполняла две вещи: 1) обновлялась в реальном времени до метки сбоку от экрана приложения; и 2) обновить специальную переменную поля ввода, которая будет использоваться для обновления базы данных в соответствующее время.
Мне удалось выполнить то, что я хотел. Однако в целях очистки кода я хотел бы изучить более простую версию, включающую цикл. Когда я печатаю в одном из полей ввода, это запускает функцию, которая последовательно проверяет переменные для этой группы полей, чтобы определить, какое из них было изменено, чтобы затем обновить соответствующую метку и установить новое значение для основного. переменная, принадлежащая этому полю, которая будет использоваться для записи в базу данных.
Сейчас у меня есть отдельная функция для каждого поля ввода. Я уверен, что есть способ создать единую функцию, к которой могут быть привязаны все поля, которая может проходить через переменные, проверять каждое изменение с помощью оператора if, а затем выполнять необходимую функцию, когда обнаруживает, какой блок был изменен.< /p>
Ниже приведен раздел функционального кода, демонстрирующий в общих чертах то, что я делаю.

Код: Выделить всё

import tkinter
app = tkinter.Tk()
app.configure(bg="#212325")
app.title("The Mobile Mechanic")
appw = 1370 #Width.
apph = 700 #Height.
scrw = app.winfo_screenwidth()
scrh = app.winfo_screenheight()
xpos = (scrw / 2) - (appw / 2)
ypos = (scrh / 2) - (apph / 2) #-48 pixels
app.geometry(f'{appw}x{apph}+{int(xpos)}+{int(ypos)}')

infofrm = tkinter.Frame(master=app, bg="#292d2e", width=230.8333333333333, height=690)
infofrm.place(x=5, y=5)

cstfrm = tkinter.Frame(master=app, bg="#292d2e", width=1123.666666666667, height=635)
cstfrm.place(x=240.8333333333333, y=60)

#Vehicle Information Display Frame
vehinfofrm = tkinter.Frame(master=infofrm, width=210.8333333333333, height=300, bg="#292d2e")
vehinfofrm.place(x=10, y=300)

def VIN_Display(event):
CV1 = VINbox.get()
VINlen = len(CV1)
VINdisplay1 = tkinter.StringVar(master=vehinfofrm, value="")
VINdisplay2 = tkinter.StringVar(master=vehinfofrm, value="")
VINdisplay3 = tkinter.StringVar(master=vehinfofrm, value="")
VINdisplbl1 = tkinter.Label(master=vehinfofrm, width=29, anchor="w", bg="#292d2e", fg="#b2b4b7", textvariable=VINdisplay1)
VINdisplbl1.place(x=1, y=0)
VINdisplbl2 = tkinter.Label(master=vehinfofrm, width=29, anchor="w", bg="#292d2e", fg="#b2b4b7", textvariable=VINdisplay2)
VINdisplbl2.place(x=1, y=18)
VINdisplbl3 = tkinter.Label(master=vehinfofrm, width=29, anchor="w", bg="#292d2e", fg="#b2b4b7", textvariable=VINdisplay3)
VINdisplbl3.place(x=1, y=36)
if VINlen == 0:
VINdisplay1.set("")
VINdisplay2.set("")
VINdisplay3.set("")
if VINlen > 0 and VINlen < 18:
if VINlen < 17:
VINdisplay1.set("VIN: " + CV1 + " (Incomplete)")
VINdisplay3.set(value="")
if VINlen > 7:
VINdisplay2.set("Engine Code: " + CV1[7])
if VINlen == 17:
VINdisplay1.set("VIN: " + CV1 + "")
VINdisplay2.set("Engine Code: " + CV1[7])
VINdisplay3.set("Last Eight: "  + CV1[9:])

#Vehicle Listbox
vehlbl0 = tkinter.Label(master=cstfrm, text="Customer Vehicles", bg="#292d2e", fg="#b2b4b7")
vehlbl0.place(x=557, y=27)
custlstbox = tkinter.Listbox(master=cstfrm, bg="#b2b4b7", fg="#000000", width=34, height=5)
custlstbox.place(x=507, y=58.5)

#VIN Box
vehlbl1 = tkinter.Label(master=cstfrm, text="Vehicle VIN", bg="#292d2e", fg="#b2b4b7")
vehlbl1.place(x=437, y=163)
VINfrm = tkinter.Frame(master=cstfrm, bg="#b2b4b7", width=208, height=21, borderwidth=2, relief=tkinter.SUNKEN)
VINfrm.place(x=507, y=163)
VINbox = tkinter.Entry(master=VINfrm, bg="#b2b4b7", fg="#000000", width=33, borderwidth=0, relief=tkinter.FLAT)
VINbox.place(x=4, y=0)
VINbox.bind("", VIN_Display)

#License Plate Box
vehlbl2 = tkinter.Label(master=cstfrm, text="License Plate", bg="#292d2e", fg="#b2b4b7")
vehlbl2.place(x=429, y=190)
LP1frm = tkinter.Frame(master=cstfrm, bg="#b2b4b7", width=114, height=21, borderwidth=2, relief=tkinter.SUNKEN)
LP1frm.place(x=507, y=190)
LP1box = tkinter.Entry(master=LP1frm, bg="#b2b4b7", fg="#000000", width=17, borderwidth=0, relief=tkinter.FLAT)
LP1box.place(x=4, y=0)
vehlbl3 = tkinter.Label(master=cstfrm, text="State", bg="#292d2e", fg="#b2b4b7")
vehlbl3.place(x=637, y=190)
LP2frm = tkinter.Frame(master=cstfrm, bg="#b2b4b7", width=42, height=21, borderwidth=2, relief=tkinter.SUNKEN)
LP2frm.place(x=673, y=190)
LP2box = tkinter.Entry(master=LP2frm, bg="#b2b4b7", fg="#000000", width=6, borderwidth=0, relief=tkinter.FLAT)
LP2box.place(x=4, y=0)

#Fleet ID
vehIDlbl2 = tkinter.Label(master=cstfrm, text="Fleet ID", bg="#292d2e", fg="#b2b4b7")
vehIDlbl2.place(x=458, y=217)
Fleetfrm = tkinter.Frame(master=cstfrm, bg="#b2b4b7", width=114, height=21, borderwidth=2, relief=tkinter.SUNKEN)
Fleetfrm.place(x=507, y=217)
Fleetbox = tkinter.Entry(master=Fleetfrm, bg="#b2b4b7", fg="#000000", width=17, borderwidth=0, relief=tkinter.FLAT)
Fleetbox.place(x=4, y=0)

#Year and Production Date
vehlbl4 = tkinter.Label(master=cstfrm, text="Year", bg="#292d2e", fg="#b2b4b7")
vehlbl4.place(x=474, y=253)
yrfrm = tkinter.Frame(master=cstfrm, bg="#b2b4b7", width=46, height=21, borderwidth=2, relief=tkinter.SUNKEN)
yrfrm.place(x=507, y=253)
yrbox = tkinter.Entry(master=yrfrm, bg="#b2b4b7", fg="#000000", width=6, borderwidth=0, relief=tkinter.FLAT)
yrbox.place(x=4, y=0)
vehlbl5 = tkinter.Label(master=cstfrm, text="Production Date", bg="#292d2e", fg="#b2b4b7")
vehlbl5.place(x=567, y=253)
proddtfrm = tkinter.Frame(master=cstfrm, bg="#b2b4b7", width=52, height=21, borderwidth=2, relief=tkinter.SUNKEN)
proddtfrm.place(x=663, y=253)
proddtbox = tkinter.Entry(master=proddtfrm, bg="#b2b4b7", fg="#000000", width=6, borderwidth=0, relief=tkinter.FLAT)
proddtbox.place(x=4, y=0)

#Make
vehlbl6 = tkinter.Label(master=cstfrm, text="Make", bg="#292d2e", fg="#b2b4b7")
vehlbl6.place(x=468, y=280)
mkfrm = tkinter.Frame(master=cstfrm, bg="#b2b4b7", width=208, height=21, borderwidth=2, relief=tkinter.SUNKEN)
mkfrm.place(x=507, y=280)
mkbox = tkinter.Entry(master=mkfrm, bg="#b2b4b7", fg="#000000", width=33, borderwidth=0, relief=tkinter.FLAT)
mkbox.place(x=4, y=0)

#Model
vehlbl7 = tkinter.Label(master=cstfrm, text="Model", bg="#292d2e", fg="#b2b4b7")
vehlbl7.place(x=463, y=307)
modfrm = tkinter.Frame(master=cstfrm, bg="#b2b4b7", width=208, height=21, borderwidth=2, relief=tkinter.SUNKEN)
modfrm.place(x=507, y=307)
modbox = tkinter.Entry(master=modfrm, bg="#b2b4b7", fg="#000000", width=33, borderwidth=0, relief=tkinter.FLAT)
modbox.place(x=4, y=0)

#Sub-Model
vehlbl8 = tkinter.Label(master=cstfrm, text="Sub-Model", bg="#292d2e", fg="#b2b4b7")
vehlbl8.place(x=438, y=334)
smfrm = tkinter.Frame(master=cstfrm, bg="#b2b4b7", width=208, height=21, borderwidth=2, relief=tkinter.SUNKEN)
smfrm.place(x=507, y=334)
smbox = tkinter.Entry(master=smfrm, bg="#b2b4b7", fg="#000000", width=33, borderwidth=0, relief=tkinter.FLAT)
smbox.place(x=4, y=0)

#Engine
vehlbl9 = tkinter.Label(master=cstfrm, text="Engine Size",  bg="#292d2e", fg="#b2b4b7")
vehlbl9.place(x=438, y=361)
eng1frm = tkinter.Frame(master=cstfrm, bg="#b2b4b7", width=54, height=21, borderwidth=2, relief=tkinter.SUNKEN)
eng1frm.place(x=507, y=361)
eng1box = tkinter.Entry(master=eng1frm, bg="#b2b4b7", fg="#000000", width=7, borderwidth=0, relief=tkinter.FLAT)
eng1box.place(x=4, y=0)
vehlbl10 = tkinter.Label(master=cstfrm, text="Engine ID", bg="#292d2e", fg="#b2b4b7")
vehlbl10.place(x=577, y=361)
eng2frm = tkinter.Frame(master=cstfrm, bg="#b2b4b7", width=78, height=21, borderwidth=2, relief=tkinter.SUNKEN)
eng2frm.place(x=637, y=361)
eng2box = tkinter.Entry(master=eng2frm, bg="#b2b4b7", fg="#000000", width=11, borderwidth=0, relief=tkinter.FLAT)
eng2box.place(x=4, y=0)

#
#Static Options
#

#Engine Specifics
engbuta = tkinter.IntVar(value=0)
engbutb = tkinter.IntVar(value=0)
engbutc = tkinter.IntVar(value=0)
engbut1 = tkinter.Checkbutton(master=cstfrm, variable=engbuta, onvalue=1, offvalue=0, bg="#b2b4b7")
engbut1.place(height=20, x=502, y=396) #396
engbut1.configure(bg="#292d2e")
engbut2 = tkinter.Checkbutton(master=cstfrm, variable=engbutb, onvalue=1, offvalue=0, bg="#b2b4b7")
engbut2.place(height=20, x=580, y=396)
engbut2.configure(bg="#292d2e")
engbut3 = tkinter.Checkbutton(master=cstfrm, variable=engbutc, onvalue=1, offvalue=0, bg="#b2b4b7")
engbut3.place(height=20, x=658, y=396)
engbut3.configure(bg="#292d2e")
englbl1 = tkinter.Label(master=cstfrm, text="Diesel", bg="#292d2e", fg="#b2b4b7")
englbl1.place(x=522, y=396)
englbl2 = tkinter.Label(master=cstfrm, text="Turbo", bg="#292d2e", fg="#b2b4b7")
englbl2.place(x=600, y=396)
englbl3 = tkinter.Label(master=cstfrm, text="Hybrid", bg="#292d2e", fg="#b2b4b7")
englbl3.place(x=676, y=396)

#Automatic or Manual
drivebut = tkinter.IntVar(value=0)
drivebut1 = tkinter.Radiobutton(master=cstfrm, variable=drivebut, value=1, bg="#b2b4b7")
drivebut1.place(height=20, x=502, y=423)
drivebut1.configure(bg="#292d2e")
drivebut2 = tkinter.Radiobutton(master=cstfrm, variable=drivebut, value=2, bg="#b2b4b7")
drivebut2.place(height=20, x=610, y=423)
drivebut2.configure(bg="#292d2e")
drivelbl1 = tkinter.Label(master=cstfrm, text="Automatic", bg="#292d2e", fg="#b2b4b7")
drivelbl1.place(x=522, y=423)
drivelbl2 = tkinter.Label(master=cstfrm, text="Manual", bg="#292d2e", fg="#b2b4b7")
drivelbl2.place(x=630, y=423)

#Drive Wheels
drivewheelbut = tkinter.IntVar(value=0)
drivewheel1 = tkinter.Radiobutton(master=cstfrm, variable=drivewheelbut, value=1, bg="#b2b4b7")
drivewheel1.place(height=20, x=502, y=450)
drivewheel1.configure(bg="#292d2e")
drivewheel2 = tkinter.Radiobutton(master=cstfrm, variable=drivewheelbut, value=2, bg="#b2b4b7")
drivewheel2.place(height=20, x=502, y=470)
drivewheel2.configure(bg="#292d2e")
drivewheel3 = tkinter.Radiobutton(master=cstfrm, variable=drivewheelbut, value=3, bg="#b2b4b7")
drivewheel3.place(height=20, x=502, y=490)
drivewheel3.configure(bg="#292d2e")
drivewheel4 = tkinter.Radiobutton(master=cstfrm, variable=drivewheelbut, value=4, bg="#b2b4b7")
drivewheel4.place(height=20, x=502, y=510)
drivewheel4.configure(bg="#292d2e")
drivewheellbl1 = tkinter.Label(master=cstfrm, text="FWD", bg="#292d2e", fg="#b2b4b7")
drivewheellbl1.place(x=522, y=450)
drivewheellbl2 = tkinter.Label(master=cstfrm, text="RWD", bg="#292d2e", fg="#b2b4b7")
drivewheellbl2.place(x=522, y=470)
drivewheellbl3 = tkinter.Label(master=cstfrm, text="AWD", bg="#292d2e", fg="#b2b4b7")
drivewheellbl3.place(x=522, y=490)
drivewheellbl4 = tkinter.Label(master=cstfrm, text="4WD", bg="#292d2e", fg="#b2b4b7")
drivewheellbl4.place(x=522, y=510)

#ABS
ABSbut = tkinter.IntVar(value=4)
ABS1 = tkinter.Radiobutton(master=cstfrm, variable=ABSbut, value=1, bg="#b2b4b7")
ABS1.place(height=20, x=610, y=450)
ABS1.configure(bg="#292d2e")
ABS2 = tkinter.Radiobutton(master=cstfrm, variable=ABSbut, value=2, bg="#b2b4b7")
ABS2.place(height=20, x=610, y=470)
ABS2.configure(bg="#292d2e")
ABS3 = tkinter.Radiobutton(master=cstfrm, variable=ABSbut, value=3,  bg="#b2b4b7")
ABS3.place(height=20, x=610, y=490)
ABS3.configure(bg="#292d2e")
ABS4 = tkinter.Radiobutton(master=cstfrm, variable=ABSbut, value=4, bg="#b2b4b7")
ABS4.place(height=20, x=610, y=510)
ABS4.configure(bg="#292d2e")
ABSlbl1 = tkinter.Label(master=cstfrm, text="2W-ABS", bg="#292d2e", fg="#b2b4b7")
ABSlbl1.place(x=630, y=450)
ABSlbl2 = tkinter.Label(master=cstfrm, text="4W-ABS", bg="#292d2e", fg="#b2b4b7")
ABSlbl2.place(x=630, y=470)
ABSlbl3 = tkinter.Label(master=cstfrm, text="Non-ABS", bg="#292d2e", fg="#b2b4b7")
ABSlbl3.place(x=630, y=490)
ABSlbl4 = tkinter.Label(master=cstfrm, text="Unspecified", bg="#292d2e", fg="#b2b4b7")
ABSlbl4.place(x=630, y=510)

#Save or Update Button
def on_enter(event):
svvehbut.config(bg="#3393e2")
def on_leave(event):
svvehbut.config(bg="#2369a2")
svvehbut = tkinter.Button(master=cstfrm, text="Save or Update Vehicle Record", width=28)
svvehbut.place(x=508, y=548)
svvehbut.configure(bg="#2369a2", fg="#d1d5d6")
svvehbut.bind("", on_enter)
svvehbut.bind("", on_leave)

#Clear Button
def on_enter(event):
clrvehbut.config(bg="#3393e2")
def on_leave(event):
clrvehbut.config(bg="#2369a2")
clrvehbut = tkinter.Button(master=cstfrm, text="Clear Data or Selection", width=28)
clrvehbut.place(x=508, y=575)
clrvehbut.configure(bg="#2369a2", fg="#d1d5d6")
clrvehbut.bind("", on_enter)
clrvehbut.bind("", on_leave)

app.mainloop()
Функциональной частью этого является VIN. Он делает несколько вещей. VIN состоит из семнадцати цифр. Если VIN, введенный в поле ввода, меньше семнадцати цифр, на метке будет указано, что VIN неполный (иногда вы можете ввести шестнадцать цифр и не осознавать, что пропустили одну, поэтому это была важная функция). Когда VIN достигает восьми цифр, восьмая цифра отделяется от кода двигателя (двигатели классифицируются по восьмой цифре VIN). После ввода всех семнадцати цифр выделяются последние восемь цифр (дилерские центры используют их, когда вы звоните за запчастями). Другая вещь, которую он делает, это устанавливает переменную CV1 (это Customer Vehicle Box 1), которая будет использоваться для когда я зайду так далеко.
Итак, вопрос в том, есть ли способ объединить множество функций в одну функцию и заставить ее циклически перебирать переменные [CV1, CV2, CV3 и т. д.], пока он не найдет поле, которое было изменено, запустит ли он соответствующие функции для правильного поля и установит соответствующую переменную для этого поля?
Я МОГУ делайте эту функцию по одной. Я заставил это работать, и я могу заставить работать все остальные коробки таким же образом. Но, повторюсь, я пытаюсь очистить код и упростить его, если это возможно. Некоторые рекомендации были бы весьма признательны. Кроме того, я не компьютерный гений, но я новичок в этом языке, поэтому, пожалуйста, ответьте соответственно.

Подробнее здесь: https://stackoverflow.com/questions/791 ... to-determi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»