Tkinter кнопка привязки - PullRequest
2 голосов
/ 20 июля 2009

Это мой код:

import Tkinter
from Tkconstants import *

tk = Tkinter.Tk()


class MyApp:

    def __init__(self,parent):

        self.frame = Tkinter.Frame(tk,relief=RIDGE,borderwidth=2)
        self.frame.pack()

        self.message = Tkinter.Message(tk,text="Symbol Disolay")

        label=Tkinter.Label(self.frame,text="Is Symbol Displayed")
        label.pack()

        self.button1=Tkinter.Button(self.frame,text="YES")
        self.button1.pack(side=BOTTOM)
        self.button1.bind("<Button-1>", self.button1Click)

        self.button2=Tkinter.Button(self.frame,text="NO")
        self.button2.pack()
        self.button2.bind("<Button-1>", self.button2Click)


    def button1Click(self, event):
            "pressed yes"

    def button2Click(self, event):
            "pressed no"

myapp = MyApp(tk)
tk.mainloop()

Что мне делать в button1Click () и button2Click (), чтобы они возвращали "YES" или "NO" моей программе в строковом формате?

Ответы [ 3 ]

2 голосов
/ 12 сентября 2010
import Tkinter
from Tkconstants import *

tk = Tkinter.Tk()


class MyApp:

    def __init__(self,parent):

        self.frame = Tkinter.Frame(tk,relief=RIDGE,borderwidth=2)
        self.frame.pack()

        self.message = Tkinter.Message(tk,text="Symbol Disolay")

        label=Tkinter.Label(self.frame,text="Is Symbol Displayed")
        label.pack()

        self.button1=Tkinter.Button(self.frame,text="YES")
        self.button1.pack(side=BOTTOM)
        self.button1.bind("<Button-1>", self.button1Click)

        self.button2=Tkinter.Button(self.frame,text="NO")
        self.button2.pack()
        self.button2.bind("<Button-1>", self.button2Click)


    def button1Click(self, event):
            return "YES"

    def button2Click(self, event):
            return "NO"

myapp = MyApp(tk)
tk.mainloop()
1 голос
/ 11 января 2010

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

Если вы хотите, чтобы «ДА» или «НЕТ» применялись к виджету self.message, вы можете изменить свои обратные вызовы, чтобы они выглядели так:

def button1Click(self, event):
        self.message.configure(text="YES")

def button2Click(self, event):
        self.message.configure(text="NO")

Затем вам нужно будет сделать виджет сообщения видимым. Например, добавьте куда-нибудь в свой код «self.message.pack ()».

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

0 голосов
/ 20 июля 2009

просто return "pressed yes" вернет строку в обработчик TKinter, который проигнорирует ее.

Вы должны что-то сделать в настройках клика, например, обновить текст метки

...