python3 tkinter, пытается обновить ярлык - PullRequest
0 голосов
/ 15 июня 2011

Я посмотрел на некоторые другие ответы здесь, но я не понимаю, как это сделать.Это лучшее из того, что я придумаю.

Чтобы исключить несоответствующие комментарии, я предпочитаю сетку над пакетом, а также мне нравится способ выполнения виджетов widget.configure, так что ровно одна логическая вещьвыполняется с каждой строкой кода.

ближе к концу кода, у меня есть self.root.update () Я также остановил себя.без удачи.

from tkinter import *

class Application:
    def __init__(self, master):
        frame1 = Frame(master)
        frame1.grid(row=1, column=1)

        self.btnQuit = Button(frame1)
        self.btnQuit.configure(text="QUIT")
        self.btnQuit.configure(fg="red")
        self.btnQuit.configure(command=frame1.quit)
        self.btnQuit.grid(row=1, column=1)

        self.btnHi = Button(frame1)
        self.btnHi.configure(text="hi there")
        self.btnHi.configure(command="self.hello")
        self.btnHi.grid(row=2, column=1)

        self.lblMessage = Label(frame1)
        self.lblMessage.grid(row=2, column=2)

        def hello(self):
            self.lblMessage.configure(text="hello there")
            self.root.update()

root = Tk()
program = Application(root)
root.mainloop()

Ответы [ 4 ]

2 голосов
/ 02 июня 2012

Как указано выше:

self.btnHi.configure(command="self.hello")

должно быть:

self.btnHi.configure(command=self.hello)

и помните отступ строк. Но также:

self.v = StringVar()
self.lblMessage = Label(frame1, textvariable=self.v)

В своем привет-методе используйте:

self.v.set("hello there")
1 голос
/ 16 июня 2011
  1. Вы должны задать опцию command для вызываемого объекта, а не строку для eval 'd (которая не будет работать в любом случае, поскольку она будет находиться в совсем другой области, например, без/ другой self).http://infohost.nmt.edu/tcc/help/pubs/tkinter/button.html, кажется, подтверждает это.
  2. То, как ваш код имеет отступ в вашем вопросе, вы определяете локальную функцию hello внутри __init__ вместо того, чтобы определять ее на уровне класса (как метод).Вам нужно удалить один уровень отступа, начиная с def hello
0 голосов
/ 01 января 2015

Пожалуйста, попробуйте это:

from tkinter import *

    class Application:
        def __init__(self, master):
            frame1 = Frame(master)
            frame1.grid(row=1, column=1)

            self.btnQuit = Button(frame1)
            self.btnQuit.configure(text="QUIT")
            self.btnQuit.configure(fg="red")
            self.btnQuit.configure(command=frame1.quit)
            self.btnQuit.grid(row=1, column=1)

            self.btnHi = Button(frame1)
            self.btnHi.configure(text="hi there")
            self.btnHi.configure(command=self.hello)
            self.btnHi.grid(row=2, column=1)

            self.lblMessage = Label(frame1)
            self.lblMessage.grid(row=2, column=2)

        def hello(self):
            self.lblMessage.configure(text="hello there")
            self.root.update()

    root = Tk()`enter code here`
    program = Application(root)
    root.mainloop()
0 голосов
/ 21 мая 2012

Не ясно, что вы пытаетесь сделать, но если вы пытаетесь изменить содержимое метки после ее создания, вам необходимо использовать объект StringVar ().Установка этого параметра в параметр textvariable метки (в его конструкторе) будет означать, что метка обновляется всякий раз, когда вы обновляете значение StringVar (используя его метод set ()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...