Есть ли способ вызвать кликабельность кнопки в tkinter? - PullRequest
0 голосов
/ 11 сентября 2018

Я хотел бы иметь кнопку, которая выполняет команду только после выполнения некоторого критерия.

Это наша кнопка:

import tkinter as tk
from matplotlib import *
from tkinter import ttk, messagebox, filedialog

class Hauptmenu(tk.Frame): 

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent) 

        ttk.Button(self, text='Button', command=self.doSomething).grid(row=7,column=4, sticky="w")
        clickability_criterion=False

Итак, я хочу, чтобы кнопкабыть функциональным после того, как я установил критерий True.

Есть ли какой-нибудь элегантный способ достичь этого?

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Существует поле state, когда вы определяете кнопку, которую вы можете установить на ENABLED или DISABLED.Вы можете определить, что ваша кнопка будет DISABLED при запуске, например:

import tkinter as tk
from matplotlib import *
from tkinter import ttk, messagebox, filedialog

tk = tk.Tk()

myButton = ttk.Button(tk, text='Button', command=self.doSomething, state = 'disabled')
myButton.grid(row=7,column=4, sticky="w")

Когда какое-либо условие выполнено, вы можете изменить статус на NORMAL:

myButton['state'] = 'normal'

Этодолжен сделать свое дело.

РЕДАКТИРОВАТЬ: что касается обновления во время выполнения, я бы определил метод в вашем классе для обновления статуса для вас, что-то вроде этого:

class Hauptmenu:
    def __init__(self, parent):
        self.myParent = parent  
        self.myContainer = tk.Frame(parent)
        self.myContainer.pack()
        self.button = tk.Button(self.myContainer)
        self.button.configure(text="Button", command=self.doSomething, state = 'disabled')
        self.button.pack()

    def doSomething(self):
        print('This button has been pressed')

    def changeButtonState(self, state):
        self.button['state'] = state



root = tk.Tk()
c = Hauptmenu(root)
c.changeButtonState('normal')
tk.mainloop()
0 голосов
/ 11 сентября 2018

вы можете создать отключенную кнопку следующим образом:

ttk.Button(self, text='Button', state = ttk.DISABLED, command=self.doSomething).grid(row=7,column=4, sticky="w")

и затем включить ее следующим образом:

variable_inwhich_button_is_saved.configure(state=ttk.ENABLED)
...