#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
?