как получить текст кнопки в tkinter

#python #tkinter

#питон #tkinter

Вопрос:

итак, у меня есть это простое окно:

форма

итак, в основном я хочу сделать следующее: я хочу выбрать, скажем, набор данных 1 и случайный лес, а затем нажать «Отправить». когда я нажимаю «Отправить», у меня есть функция, которая просто проверяет текст на обеих кнопках ( она проверяет набор данных 1 и случайный лес), а затем возвращает соответствующее действие. так что в основном моя проблема в тексте, который я не могу прочитать.

Я пытался использовать cget в tkinter, но не смог разобраться в этом должным образом.

мой код таков:

 win = Tk()  win.geometry("400x600") win.configure(background="cyan") win.title("Registration Form")  title = Label(win, text="Ensemble Methods", bg="gray", width="300", height="2", fg="white", font = ("Calibri 20 bold italic underline")).pack()  dataset_1 = Button(win, text="dataset 1", width="12",height="1",activebackground="violet", bg="Pink",command=printit,font = ("Calibri 12 ")).place(x=20, y=200) dataset_2 = Button(win, text="dataset 2", width="12",height="1",activebackground="violet", bg="Pink",command=printit,font = ("Calibri 12 ")).place(x=150, y=200) dataset_3 = Button(win, text="dataset 3", width="12",height="1",activebackground="violet", bg="Pink",command=printit,font = ("Calibri 12 ")).place(x=280, y=200)  radio = StringVar()  random_forest = Radiobutton(win, text="Random Forest",bg="cyan",variable=radio,value="Male",font = ("Verdana 12")).place(x=20,y=340) AdaBoost = Radiobutton(win, text="Ada Boost",bg="cyan",variable=radio,value="Female",font = ("Verdana 12")).place(x=280,y=340)   submit = Button(win, text="Submit", width="12",height="1",activebackground="violet", bg="Pink",command=printit,font = ("Calibri 12 ")).place(x=240, y=540)  win.mainloop()  

и функция, которая будет принимать текст и выполнять действие, это:

 def printit():    my_text = dataset_1.cget('text')    if my_text == 'dataset 1':  Label(win,text="yes",fg="blue",bg="yellow",font = ("Calibri 10 bold")).place(x=12,y=780)  

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

1. У вас есть ответ, объясняющий, как выполнить эту .cget() работу, но я собираюсь задать вопрос, чего вы надеялись достичь с ее помощью. В опубликованном вами коде нет ничего, что могло бы изменить текст кнопки, поэтому текст, который вы извлекаете из нее, всегда будет одним и тем же. Вам нужно предоставить каждой кнопке свою уникальную command= функцию, если вы хотите, чтобы они выполняли разные действия.

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

3. Вы проверяете текст dataset_1 , в частности. Так будет всегда "dataset 1" , независимо от того, какая кнопка была нажата.

4. @jasonharper как я могу проверить текст каждого из них? так, например, если я нажал на набор данных 2, как я могу сообщить программе, что я нажал на это, поэтому, когда я нажму кнопку отправить, она выполнит другое действие

5. Вы говорите, что нажали кнопку набора данных 2, предоставив ей отдельную command= функцию; в Tkinter нет другого способа различать кнопки. Эта функция может быть одной строкой, которая вызывает общую функцию с отдельным параметром, идентифицирующим конкретную кнопку.

Ответ №1:

place() метод всегда возвращает None , поэтому dataset_1 переменная сохраняет None значение.
Вам нужно использовать

 dataset_1 = Button(win, text="dataset 1", width="12",height="1",activebackground="violet", bg="Pink",command=printit,font=("Calibri 12 ")) dataset_1.place(x=20, y=200)  

Вместо

 dataset_1 = Button(win, text="dataset 1", width="12",height="1",activebackground="violet", bg="Pink",command=printit,font = ("Calibri 12 ")).place(x=20, y=200)  

Чтобы сохранить ссылку на Button объект в переменной, а затем получить к ней доступ.

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

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

2. Вы написали Label(win, text="yes", fg="blue", bg="yellow", font=("Calibri 10 bold")).place(x=12, y=780) и установили y=780 , но ваше окно имеет высоту всего 600 пикселей.

3. Хотя я рекомендую передать аргумент функции и проверить его, чтобы кнопки могли быть None слишком

4. @CoolCloud как я могу заставить кнопку «Отправить» узнать, какой набор данных я выбрал?

5. Random Forest или Ada Boost ?