Кнопки Tkinter не меняют значение переменной - PullRequest
0 голосов
/ 19 сентября 2019

Мои навыки в Tkinter улучшаются день ото дня, я не могу поверить, насколько далеко я по сравнению с 2 неделями назад.

Теперь моя проблема в том, что я не могу заставить работать кнопки Checkbuttons.По какой-то причине, которая ускользает от моего сознания, они всегда остаются с одним и тем же значением, не имеет значения, проверяются они или нет.

Я пробовал использовать кнопки-флажки в другом скрипте, и они работают отлично.Они также работают в других окнах из моего графического интерфейса, но когда я помещаю их в окно, в котором они должны находиться, они просто перестают работать.

У вас есть идеи, почему это может происходить?

Спасибо!: D

Я попытался установить различные значения по умолчанию для кнопки проверки, например 10 для активной и 20 для не активной, но переменная не изменяется, она по-прежнему имеет значение 0.

from tkinter import *


def runp(): 

    def cb(vari):
        print ("variable is {0}".format(vari.get()))


    window = Tk()
    window.title("Please choose the parameters")
    window.geometry('500x350')

    labelSelect=Label(window, text="Which Rdata file would you like to load? (from output directory)")
    labelSelect.grid(column=0, row=11)

    FastaC=BooleanVar()
    RwMatrix=BooleanVar()
    RwSum=BooleanVar()
    RwInfo=BooleanVar()

    FastaCRadio=Checkbutton(window, text="FastaClean.Rdata", variable=FastaC, command=lambda: cb(FastaC))
    FastaCRadio.grid(column=1, row=11)

    RwMatrixRadio=Checkbutton(window, text="RwMatrix.Rdata", variable=RwMatrix, command=lambda: cb(RwInfo))
    RwMatrixRadio.grid(column=1, row=12)
    RwSumRadio=Checkbutton(window, text="RwSum.Rdata", variable=RwSum, command=lambda: cb(RwSum))
    RwSumRadio.grid(column=1, row=13)
    RwInfoRadio=Checkbutton(window, text="RwInfo.Rdata", variable=RwInfo,command=lambda:cb(RwInfo))
    RwInfoRadio.grid(column=1, row=14)

    window.mainloop()

master=Tk()

Button(master, text="RW", command=runp).pack()

master.mainloop()

1 Ответ

1 голос
/ 19 сентября 2019

Вам необходимо создать дочернее окно, создав экземпляры Toplevel:

изменить window= Tk() на window= Toplevel()

необходимо использовать Toplevel () для окнаоткрывается в другом окне.

код:

from tkinter import *


def runp():

    def cb(vari):
        print ("variable is {0}".format(vari.get()))


    window = Toplevel() # <-------------------
    window.title("Please choose the parameters")
    window.geometry('500x350')

    labelSelect=Label(window, text="Which Rdata file would you like to load? (from output directory)")
    labelSelect.grid(column=0, row=11)

    FastaC=BooleanVar()
    RwMatrix=BooleanVar()
    RwSum=BooleanVar()
    RwInfo=BooleanVar()

    FastaCRadio=Checkbutton(window, text="FastaClean.Rdata", variable=FastaC, command=lambda: cb(FastaC))
    FastaCRadio.grid(column=1, row=11)

    RwSumRadio=Checkbutton(window, text="RwMatrix.Rdata", variable=RwMatrix, command=lambda: cb(RwMatrix))
    RwSumRadio.grid(column=1, row=12)
    RwSumRadio=Checkbutton(window, text="RwSum.Rdata", variable=RwSum, command=lambda: cb(RwSum))
    RwSumRadio.grid(column=1, row=13)
    RwInfoRadio=Checkbutton(window, text="RwInfo.Rdata", variable=RwInfo,command=lambda:cb(RwInfo))
    RwInfoRadio.grid(column=1, row=14)

    window.mainloop()

master=Tk()

Button(master, text="RW", command=runp).pack()

master.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...