Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 26, 2018 12:32:03

EgorSrche
Зарегистрирован: 2018-03-10
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Здравствуйте уважаемый rami. Огромное вам спасибо за ваш ответ. Разбирался с кодом, стараюсь поумнеть, чтобы потом помогать новичкам.
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()

Прикреплённый файлы:
attachment weapon.dat (6,7 KБ)

Офлайн

#2 Апрель 26, 2018 14:45:43

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

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

EgorSrche
Combobox.current() нужен для того, чтобы стояло названия оружия по умолчанию.
Ранее в ответе #8 я писал как задать начальное значение комбобоксу:
 var2.set("Выберите оружие")
но если хотите чтобы начальным было первое оружие из списка name_weapon, то назначьте его переменной связанной с комбобоксом:
 var2.set(name_weapon[0])


Ошибка на видео связана с тем, что в функции def save(): вы перевернули с ног на голову имена переменных и метод get(). Должно быть var3.get(), а не наоборот и скобки нужны (для всех переменных).

Офлайн

#3 Апрель 30, 2018 13:10:43

EgorSrche
Зарегистрирован: 2018-03-10
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Здравствуйте уважаемый rami. Спасибо большое за ваш ответ Он мне очень помог. Все эти дни доводил до ума программу. Сейчас всё работает. Благодарю вас за неоценимую помощь. Предоставляю вам видео работы по программы https://www.youtube.com/watch?v=OT5HwoTtsiM&feature=youtu.be

Я только хотел у вас спросить, конечно, вопрос банальный, но всё-таки хочу сделать кнопку “сохранить” неактивной, пока не будет нажата кнопка “получить данные”.
Вот мой код.

 from tkinter import Tk,StringVar,Label,Entry,Button,messagebox  #импортируем только то что надо
from tkinter.ttk import Combobox    #импортируем только то что надо
from tkinter import ttk
from tkinter.filedialog import askopenfilename
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 OpenFile():
    global url
    url = askopenfilename(filetypes =(("Text File", "*.dat"),),title="Choose a file.") #открыть каталог выбора файл
    try:
        var1.set(url)
    except:
        var1.set("Не тот файл")
def mycom():
 with open(url, 'r') as f:  # открыть файл оригинала
   weapon = var2.get()# название выбранного оружие пишем в переменную
   for i in f.readlines(): # читать построчно
     if weapon in i:  # искать строку с именем оружие
       global old
       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='6 Флагов').grid(column=4, row=12, padx=5, pady=5)  # надпись перед названием
    Entry(window, width=20, textvariable=var27).grid(column=5, row=12, padx=0, pady=5)  # поле тип оружие
    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(var3.get()) + "             " + str(var4.get()) + ' ' + str(var5.get()) + '  ' + str(var6.get()) + '  '
         + str(var7.get()) + '  ' + str(var8.get()) + '   ' + str(var9.get()) + '  ' + str(var10.get()) + ' '
         + str(var11.get()) + '  ' + str(var12.get()) + '   ' + str(var13.get()) + ' ' + str(var14.get()) + '  '
         + str(var15.get()) + '  ' + str(var16.get()) + '  ' + str(var17.get()) + '               ' + str(var18.get())
         + ' ' + str(var19.get()) + ' ' + str(var20.get()) + '   ' + str(var21.get()) + ' ' + str(var22.get()) + ' '
         + str(var23.get()) + '    ' + str(var24.get()) + '          ' + str(var25.get()) + ' ' + str(var26.get())
         + '        ' + str(var27.get()) + '          ' + str(var28.get()) + ' ')
    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)
      messagebox._show("ок", "Изменения сохранены")
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=5, row=0, padx=22, 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 длина
Button(window,text="Адрес директории игры",command=OpenFile).place(x=381, y=4)  #кнопка
window.mainloop()

Отредактировано EgorSrche (Апрель 30, 2018 13:12:29)

Офлайн

#4 Апрель 30, 2018 17:49:46

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

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

EgorSrche
…хочу сделать кнопку “сохранить” неактивной, пока не будет нажата кнопка “получить данные”.
Тогда для кнопки “Сохранить” нужно создать переменную, чтобы можно было обратиться к ней когда надо. Заменить строку кода:
 Button(window,text="Сохранить",command=save).grid(column=5,row=14, padx=50, pady=30) #кнопка сохранить

на:
 bt=Button(window,state='disabled',text="Сохранить",command=save)
bt.grid(column=5,row=14, padx=50, pady=30) #кнопка сохранить

ещё в функции mycom() добавить в самом начале или в самом конце:
     bt.config(state='normal')

А теперь об ошибках:
1. в строке кода:
 Button(window,text="Адрес директории игры",command=OpenFile).place(x=381, y=4)  #кнопка
нужно place заменить на grid, в одном контейнере (окне, фрейме и т.д.) нужно пользоваться одним упаковщиком.

2. строку кода:
 if weapon in i:  # искать строку с именем оружие
нужно заменить на другой способ поиска, у меня если weapon равен “Grenade”, находит не “Grenade”, а “DetonateGrenade”

3. переменная l в функции save() формируется по колхозному , кстати, зачем нужно столько пробелов между данными?

4. переменная sol в функции mycom() не понятно для какого фига создаётся?

Офлайн

#5 Май 1, 2018 16:38:31

EgorSrche
Зарегистрирован: 2018-03-10
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

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

здравствуйте уважаемый rami. Вы очень и очень мне помогли. Вашим мудрым советом сердечно вам благодарю, испытываю также стыд за свой интеллект, что допускаю такие ошибки. Постоянно думаю как стать умнее, хотя бы немного.
Вы благодаря вашей гениально наблюдательности, обнаружили страшную ошибку, которая приводит к недееспособности программы.
крайнее недоволен своим интеллектом. На чём проблема является настоящей катастрофой. Что редактор путает имена оружие Grenade и DetonateGrenade.

Благодарю, вас теперь кнопка “сохранить”, становится активной когда это нужно.
Кнопку “ адрес директории игры” сделай через place, иначе она выглядит немного коряво, а так гостиница знаю а так достаточно ровно.
Я понимаю мне ещё не хватает опыта, это у вас наверно 20 лет практики программирования. Возможно в будущем получится всё правильно расставить с помощью grid. Зачем столько пробелов , чтобы сохранить оригинальную структуру файла, с ними я очень долго мучиться.
Вы абсолютно правы переменная sol не нужна.
Всё думаю как правильно находить строку по имени оружия, решил задействовать регулярные выражения.

Что-то не получается? Вообще работа с регулярными выражениями очень сложна. Я понимаю, что я всем вам надоел своей тупостью, стараюсь сделать редактор оружия для gta вай сити, вот и всё. Да игрушка старая, но кому-то редактор поможет.

Помогите пожалуйста мне советом, просто устал биться как рыба об лёд.

 import re
url = "weapon.dat"
with open(url, 'r') as f:
  for mytext in f.readlines():
    a = "Grenade"
    lookfor = r'[\w+]+'
    lookfor =a + lookfor 
    relu= re.findall(lookfor, mytext)
    for i in relu:
     print(i, end=" ")

Отредактировано EgorSrche (Май 1, 2018 16:39:25)

Офлайн

#6 Май 1, 2018 19:40:54

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

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

В функции mycom() замените строку кода:

             if weapon in i:  # искать строку с именем оружие

на:
             if i.startswith(weapon):    #искать строку начнающуюся с имени выбранного оружия

Офлайн

#7 Май 1, 2018 20:00:11

EgorSrche
Зарегистрирован: 2018-03-10
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

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

rami
Спасибо вам огромное уважаемый rami. Вы мне очень помогли. Душевно вам благодарен за вашу помощь. Последний вопрос как стать таким же умным как вы?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version