Как переключать функции для кнопок в Tkinter?

#python #tkinter #logic

#python #tkinter #Логические

Вопрос:

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

Вот мой код на данный момент:

 from tkinter import *


root = Tk()
root.geometry("600x600")

textBox = Text(root, width=500, height=500, wrap="none")

def doSomething():
    textBox.configure(wrap="word")
    # When I click it twice the wrap="none"

button = Button(root, text="Click Here", command=doSomething)
button.pack()


root.mainloop()
  

Поэтому, когда я нажимаю на кнопку, она должна изменить перенос на word, но когда я нажимаю на нее снова, она должна изменить перенос на none. Итак, как мне это сделать?

Ответ №1:

Просто измените свою функцию на:

 def doSomething():
    if textBox.cget("wrap") == "none":
        textBox.configure(wrap="word")
    elif textBox.cget("wrap") =="word":
        textBox.configure(wrap="none")

  

Комментарии:

1. Спасибо, что действительно помогло это работает, есть ли способ добавить галочку при переносе слов.

2. Точно так же, как простая галочка, чтобы показать, что перенос слов включен. И когда для переноса слов установлено значение none, флажок должен исчезнуть.

3. Я думаю, вам придется использовать для этого изображения. Вы можете создать ярлык, содержащий изображение, и при нажатии кнопки вы можете разместить это изображение на экране с помощью grid(), а при повторном нажатии вы можете удалить его с помощью grid_forget()

Ответ №2:

Вы можете использовать a StringVar() из tkinter.

 #!/usr/bin/env python
from tkinter import *

root = Tk()
root.geometry("600x600")
var_button = StringVar()
var_button.set("word")

textBox = Text(root, width=500, height=500, wrap="none")

def doSomething():
    if var_button.get() == "word":       
        var_button.set("none")
        # When I click it twice the wrap="none"
    else:        
        textBox.configure(wrap="word")
        var_button.set("word") 
    print(f'textBox {var_button.get()}')

button = Button(root, text="Click Here", command=doSomething)
button.pack()