Tkinter использует append для печати на этикетке - PullRequest
0 голосов
/ 26 декабря 2018

Я пытался вернуть функцию printLabel, чтобы напечатать «Hello world!», Но я не слишком уверен, как двигаться дальше:

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

from tkinter import *

class Example(Frame):   

    def printLabel(self):
        self.hello = []
        self.hello.append('Hello\n')
        self.hello.append('World!')
        print(self.hello)  
        return(self.hello)        

    def __init__(self, root):
        Frame.__init__(self, root)
        self.buttonA()
        self.viewingPanel()

    def buttonA(self):
        self.firstPage = Button(self, text="Print Text", bd=1, anchor=CENTER, height = 13, width = 13, command=lambda: self.printLabel())
        self.firstPage.place(x=0, y=0)        

    def viewingPanel(self):  
        self.panelA = Label(self, bg='white', width=65, height=13, padx=3, pady=3, anchor=CENTER, text="{}".format(self.printLabel()))
        self.panelA.place(x=100, y=0)        


def main():
    root = Tk()
    root.title("Tk")
    root.geometry('565x205')
    app = Example(root)
    app.pack(expand=True, fill=BOTH)
    root.mainloop()

if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 26 декабря 2018

Я сделал несколько изменений в вашем коде, и он должен работать так, как вы хотите:

from tkinter import *

class Example(Frame):  

    def printLabel(self):
        self.hello.append('Hello\n')
        self.hello.append('World!')  
        return(self.hello) 

    # Added 'updatePanel' method which updates the label in every button press.
    def updatePanel(self):
        self.panelA.config(text=str(self.printLabel()))

    # Added 'hello' list and 'panelA' label in the constructor.
    def __init__(self, root):
        self.hello = []
        self.panelA = None
        Frame.__init__(self, root)
        self.buttonA()
        self.viewingPanel()

    # Changed the method to be executed on button press to 'self.updatePanel()'.
    def buttonA(self):
        self.firstPage = Button(self, text="Print Text", bd=1, anchor=CENTER, height = 13, width = 13, command=lambda: self.updatePanel())
        self.firstPage.place(x=0, y=0)        

    # Changed text string to be empty.
    def viewingPanel(self):  
        self.panelA = Label(self, bg='white', width=65, height=13, padx=3, pady=3, anchor=CENTER, text="")
        self.panelA.place(x=100, y=0)        


def main():
    root = Tk()
    root.title("Tk")
    root.geometry('565x205')
    app = Example(root)
    app.pack(expand=True, fill=BOTH)
    root.mainloop()

if __name__ == '__main__':
    main()
...