Combobox.current() нужен для того, чтобы стояло названия оружия по умолчанию. Это можно сделать так.
box = Combobox(window,width=12,textvariable=var2,values=name_weapon)
box.grid(column=4, row=0, padx=2, pady=0) #поле со списком
box.current(0). Хотя уверен есть и другой способ.
Хорошо, постараюсь прикрепить него.
Абсолютно с вами согласен, нужно максимально оптимизировать код с помощью циклов.
Столкнулся с такой проблемой, постараюсь объяснить. Мы задаем имя оружие, нажимаем кнопку давай, программа открывает файл weapon.dat, ищет строку с именем оружие, сохраняет ее в переменную, затем разделяем, добавляем в список. Потом выводим каждый элемент списка в отдельное поле. Когда мы нажимаем кнопку сохранить, считывается информация с каждого поля ввода. И соединяется в строку, потом заменить старую на новую. Но почему-то значения полей ввода не записывается в файл? Хотя командой Print на экран выводится.
На видео всё более понятно https://www.youtube.com/watch?v=8bNK9NrNmg4&feature=youtu.be
Помогите пожалуйста, оружия почти готов.
from tkinter import Tk,StringVar,Label,Entry,Button #импортируем только то что надо from tkinter.ttk import Combobox #импортируем только то что надо name_weapon=("Unarmed", "BrassKnuckle", "ScrewDriver", "GolfClub", "NightStick", "Knife", "BaseballBat", "Hammer", "Cleaver", "Machete", "Katana", "Chainsaw", "Grenade", "DetonateGrenade", "TearGas", "Molotov", "Rocket", "Colt45", "Python", "Shotgun", "Spas12Shotgun", "StubbyShotgun", "Tec9", "Uzi", "SilencedIngram", "Mp5", "m4", "Ruger", "SniperRifle", "LaserScope", "RocketLauncher", "FlameThrower", "M60 ", "Minigun", "Detonator", "HeliCannon", "Camera")# Кортеж имен оружия def vares(): var0, var1, var2, var3, var4, var5 = StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar() var6, var7, var8, var9, var10 = StringVar(), StringVar(), StringVar(), StringVar(), StringVar() var11, var12, var13, var14, var15 = StringVar(), StringVar(), StringVar(), StringVar(), StringVar() var16, var17, var18, var19, var20 = StringVar(), StringVar(), StringVar(), StringVar(), StringVar() var21, var22, var23, var24, var25 = StringVar(), StringVar(), StringVar(), StringVar(), StringVar() var26, var27, var28 = StringVar(), StringVar(), StringVar() return var0, var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, var15, var16, var17, var18, var19, var20, var21, var22, var23, var24, var25, var26, var27, var28 def mycom(): with open(url, 'r') as f: # открыть файл оригинала weapon = var2.get()# название выбранного оружие пишем в переменную for i in f.readlines(): # читать построчно if weapon in i: # искать строку с именем оружие old = i # сохранит строку в переменную, для последующий замены e = i e = e.split() sol = {str("название оружия"): e[0], str("тип огня"): e[1], str("диапазон"): e[2], str("скорость стрельбы"): e[3], str("время перезарядка"): e[4], str("количество боеприпасов"): e[5], str("урон"): e[6], str("скорость, с которой летит снаряд"): e[7], str("радиус действия оружия"): e[8], str("максимальное время, за которое может продержаться в воздухе снаряд"): e[9], str("вектор смещение огня x"): e[10], str("вектор смещение огня y"): e[11], str("вектор смещение огня z"): e[12], str("проигрывание анимации"): e[13], str("начало цикла анимации"): e[14], str("конец цикла анимации"): e[15], str("точки в анимации, где оружие стреляет"): e[16], str("точки в анимации, где оружие стреляет2"): e[17], str("точка в аним, где мы можем прорыв аним / атаки и убежать"): e[18], str("id модели оружия"): e[19], str("2 id модели оружия"): e[20], str("x"): e[21], str("y"): e[22], str("z"): e[23], str("a"): e[24], str("номер слота оружие"): e[25]} var3.set(e[0]) #название оружия var4.set(e[1]) #тип огня var5.set(e[2]) #диапазон var6.set(e[3]) #скорость стрельбы var7.set(e[4])# время перезарядка var8.set(e[5])# количество боеприпасов var9.set(e[6])# урон var10.set(e[7])# скорость, с которой летит снаряд var11.set(e[8])# радиус действия оружия var12.set(e[9])# максимальное время, за которое может продержаться в воздухе снаряд var13.set(e[10])# вектор смещение огня x var14.set(e[11])# вектор смещение огня y var15.set(e[12])# вектор смещение огня z var16.set(e[13])# проигрывание анимации var17.set(e[14])# начало цикла анимации var18.set(e[15])# конец цикла анимации var19.set(e[16])# точки в анимации, где оружие стреляет var20.set(e[17])# точки в анимации, где оружие стреляет2 var21.set(e[18])# точка в аним, где мы можем прорыв аним / атаки и убежать var22.set(e[19])# id модели оружия var23.set(e[20])# 2 id модели оружия var24.set(e[21])# x var25.set(e[22])# y var26.set(e[23])# z var27.set(e[24])# a var28.set(e[25])# номер слота оружие def label(): Label(window, text='Название').grid(column=0, row=1, padx=0, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var3).grid(column=1, row=1, padx=15, pady=5) # поле имя оружие Label(window, text='Тип оружие').grid(column=0, row=2, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var4).grid(column=1, row=2, padx=0, pady=5) # поле тип оружие Label(window, text='диапазон').grid(column=0, row=3, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var5).grid(column=1, row=3, padx=0, pady=5) # поле тип оружие Label(window, text='скорость стрельбы').grid(column=0, row=4, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var6).grid(column=1, row=4, padx=0, pady=5) # поле тип оружие Label(window, text='время перезарядки').grid(column=0, row=5, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var7).grid(column=1, row=5, padx=0, pady=5) # поле тип оружие Label(window, text='скорость стрельбы').grid(column=0, row=6, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var8).grid(column=1, row=6, padx=0, pady=5) # поле тип оружие Label(window, text='урон').grid(column=0, row=7, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var9).grid(column=1, row=7, padx=0, pady=0) # поле тип оружие Label(window, text='скорость полета снаряда').grid(column=4, row=1, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var10).grid(column=5, row=1, padx=0, pady=0) # поле тип оружие Label(window, text='радиус действия оружия').grid(column=4, row=2, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var11).grid(column=5, row=2, padx=0, pady=0) # поле тип оружие Label(window, text='макс время в воздухе снаряд').grid(column=4, row=3, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var12).grid(column=5, row=3, padx=0, pady=0) # поле тип оружие Label(window, text='вектор смещение огня x').grid(column=4, row=4, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var13).grid(column=5, row=4, padx=0, pady=0) # поле тип оружие Label(window, text='вектор смещение огня y').grid(column=4, row=5, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var14).grid(column=5, row=5, padx=0, pady=0) # поле тип оружие Label(window, text='вектор смещение огня z').grid(column=4, row=6, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var15).grid(column=5, row=6, padx=0, pady=0) # поле тип оружие Label(window, text='проигрывание анимации').grid(column=4, row=7, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var16).grid(column=5, row=7, padx=0, pady=0) # поле тип оружие Label(window, text='начало цикла анимации').grid(column=0, row=7, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var17).grid(column=1, row=7, padx=0, pady=0) # поле тип оружие Label(window, text='конец цикла анимации').grid(column=0, row=8, padx=5, pady=5) # надпись перед названием Entry(window, width=20, textvariable=var18).grid(column=1, row=8, padx=0, pady=5) # поле тип оружие Label(window, text='точки в ани оружие стреляет').grid(column=0, row=9, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var19).grid(column=1, row=9, padx=0, pady=0) # поле тип оружие Label(window, text='точки в ани оружие стреляет2').grid(column=0, row=10, padx=5, pady=5) # надпись перед названием Entry(window, width=20, textvariable=var20).grid(column=1, row=10, padx=0, pady=0) # поле тип оружие Label(window, text='точка в аним, прорыв ани атаки').grid(column=0, row=11, padx=5, pady=2) # надпись перед названием Entry(window, width=20, textvariable=var21).grid(column=1, row=11, padx=0, pady=0) # поле тип оружие Label(window, text='id модели оружия').grid(column=0, row=12, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var22).grid(column=1, row=12, padx=0, pady=0) # поле тип оружие Label(window, text='2id модели оружия').grid(column=4, row=8, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var23).grid(column=5, row=8, padx=0, pady=0) # поле тип оружие Label(window, text='x').grid(column=4, row=9, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var24).grid(column=5, row=9, padx=0, pady=0) # поле тип оружие Label(window, text='y').grid(column=4, row=10, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var25).grid(column=5, row=10, padx=0, pady=5) # поле тип оружие Label(window, text='z').grid(column=4, row=11, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var26).grid(column=5, row=11, padx=0, pady=5) # поле тип оружие Label(window, text='a').grid(column=4, row=12, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var27).grid(column=5, row=12, padx=0, pady=0) # поле тип оружие Label(window, text='номер слота оружие').grid(column=4, row=13, padx=5, pady=0) # надпись перед названием Entry(window, width=20, textvariable=var28).grid(column=5, row=13, padx=0, pady=0) # поле тип оружие def save(): l = (str(get.var3) + " " + str(get.var4) + ' ' + str(get.var5) + ' ' + str(get.var6) + ' ' + str(get.var7) + ' ' + str(get.var8) + ' ' + str(get.var9) + ' ' + str(get.var10) + ' ' + str(get.var11) + ' ' + str(get.var12) + ' ' + str(get.var13) + ' ' + str(get.var14) + ' ' + str(get.var15) + ' ' + str(get.var16) + ' ' + str(get.var17) + ' ' + str(get.var18) + ' ' + str(get.var19) + ' ' + str(get.var20) + ' ' + str(get.var21) + ' ' + str(get.var22) + ' ' + str(get.var23) + ' ' + str(get.var24) + ' ' + str(get.var25) + ' ' + str(get.var26) + ' ' + str(get.var27) + ' ' + str(get.var28) + ' ') l = l + '\n' with open(url, 'r') as f: old_data = f.read() new_data = old_data.replace(old, l) # заменяем старую строку на новую с измененными параметрами with open(url, 'w') as f: f.write(new_data) url = "D:\\weapon.dat" # адрес файла window=Tk() # основа var0,var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, var15, var16, var17, var18, var19, var20, var21, var22, var23, var24, var25, var26, var27, var28 = vares() window.title("weapons editor vc ") # заголовок window.geometry("800x450+650+300") # Первые 2 определяют ширину и высоту окна. Последние 2 x и y координаты на экране. window.configure(bg='DimGray') # Цвет фона окна Button(window,text="Давай",command=mycom).grid(column=4,row=14, padx=50, pady=30) #кнопка Entry(window,width=20, textvariable=var1).grid(column=1, row=0, padx=0, pady=5) #размер поле адреса ввода width длина Label(window,text='путь').grid(column=0, row=0, padx=30, pady=0) # надпись перед вводом label()# все надписи с полями box = Combobox(window,width=12,textvariable=var2,values=name_weapon) box.grid(column=4, row=0, padx=2, pady=0) #поле со списком box.current(0) Button(window,text="Сохранить",command=save).grid(column=5,row=14, padx=50, pady=30) #кнопка сохранить Entry(window,width=20, textvariable=var1).grid(column=1, row=0, padx=0, pady=5) #размер поле адреса ввода width длина window.mainloop()
, кстати, зачем нужно столько пробелов между данными?