Python - Использование Tkinter - сохранение переменных переключателей между скриптами - PullRequest
0 голосов
/ 15 марта 2020

У меня есть скрипт, который использует tkinter. Я создал предопределенные переключатели в этом сценарии. Я пытаюсь вызвать сценарий из второго сценария. Когда я запускаю оригинальный скрипт, распечатка работает нормально. Однако, когда я запускаю его из второго скрипта, переменная переключателя var.get (), похоже, не транслируется между скриптами, и распечатка происходит не так, как ожидалось. Что я делаю неправильно? Любая помощь с этим будет принята с благодарностью !!

Пример. когда я запускаю из первого скрипта, распечатка:

Вы выбрали Arcti c

Вы выбрали Лес

Вы выбрали Луга

Вы выбрали Гору

, когда я запускаю из второго скрипта распечатка:

Вы выбрали

Вы выбрали

Вы выбрали

Вы выбрали

- выбор переключателя отсутствует

Дополнительные сведения: Оба сценария сохранены в одной папке. Я попытался установить «выбор» в качестве глобальной переменной.

Чтобы воспроизвести эту ошибку:

1.сохраните как два отдельных сценария python (первый сценарий, второй сценарий) в одной папке.

Запустите первый скрипт, сделайте выбор радио, и сообщение для печати будет в соответствии с ожиданиями. ex "Вы выбрали Arcti c"

Запустите второй скрипт, выберите "создать" в меню. Выберите «Получить монстров». Сделайте выбор радиокнопки. Распечатка будет только «Вы выбрали». Она не включает биом

Первый сценарий:

from tkinter import *

def sel():
    selection = "You've selected " + var.get()
    poop = var.get()
    print(selection)
    return poop


root = Tk()
var = StringVar()

radio_frame = Frame(root, borderwidth=2,relief="groove")

## Radio buttons for choosing biome
biome_label=Label(radio_frame, text="Please choose a biome")
biome_label.pack()
search_biome1 = Radiobutton(radio_frame, text="Arctic", variable=var,
value="Arctic", command=sel, width=10, anchor=W)
search_biome1.pack()
search_biome2 = Radiobutton(radio_frame, text="Coast", variable=var,
value="Coast", command=sel, width=10, anchor=W)
search_biome2.pack()
search_biome3 = Radiobutton(radio_frame, text="Desert", variable=var,
value="Desert", command=sel, width=10, anchor=W)
search_biome3.pack()
search_biome4 = Radiobutton(radio_frame, text="Forest", variable=var,
value="Forest", command=sel, width=10, anchor=W)
search_biome4.pack()
search_biome5 = Radiobutton(radio_frame, text="Grassland", variable=var,
value="Grassland", command=sel, width=10, anchor=W)
search_biome5.pack()
search_biome6 = Radiobutton(radio_frame, text="Hill", variable=var,
value="Hill", command=sel, width=10, anchor=W)
search_biome6.pack()
search_biome7 = Radiobutton(radio_frame, text="Mountain", variable=var,
value="Mountain", command=sel, width=10, anchor=W)
search_biome7.pack()
search_biome8 = Radiobutton(radio_frame, text="Swamp", variable=var,
value="Swamp", command=sel, width=10, anchor=W)
search_biome8.pack()
search_biome9 = Radiobutton(radio_frame, text="Underdark", variable=var,
value="Underdark", command=sel, width=10, anchor=W)
search_biome9.pack()
search_biome10 = Radiobutton(radio_frame, text="Underwater", variable=var,
value="Underwater", command=sel, width=10, anchor=W)
search_biome10.pack()
search_biome11 = Radiobutton(radio_frame, text="Urban", variable=var,
value="Urban", command=sel, width=10, anchor=W)
search_biome11.pack()

radio_frame.grid()




root.mainloop()

Второй сценарий:

from tkinter import *
from tkinter import messagebox



root = Tk()
root.title("Main")

def getMonsters():
    import DD_Enemy_Generator_Biome
    poop = DD_Enemy_Generator_Biome.sel()


menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Create", menu=filemenu)
filemenu.add_command(label="Get Monsters", command=getMonsters)
root.config(menu=menubar)
root.mainloop()

Ответы [ 2 ]

1 голос
/ 15 марта 2020

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

def sel(biome_):
    global selection
    selection = "You've selected " + biome_
    poop = biome_
    print(selection)
    return poop

root = Tk()
var = StringVar()

radio_frame = Frame(root, borderwidth=2,relief="groove")

## Radio buttons for choosing biome
biome_label=Label(radio_frame, text="Please choose a biome")
biome_label.pack()

search_biome2 = Radiobutton(radio_frame, text="Coast", variable=var,
value="Coast", command=lambda value="Coast": sel(value), width=10, anchor=W)
0 голосов
/ 15 марта 2020

не может воспроизвести ошибку, дайте нам больше деталей или больше кода ..

...