Как назначить функцию кнопке, чтобы при щелчке она отображала строку в окне Text ()? - PullRequest
0 голосов
/ 15 апреля 2019

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

from tkinter import *

class PayrollSummary:
    def __init__(pay):
        window = Tk()
        window.title("Employee Payroll")

        #Add Frame 1
        frame1 = Frame(window)
        frame1.pack()


        #Add ReadFile Button          
        btReadFile = Button(frame1, text = "Read File")


        #Add ShowPayroll Button
        btShowPayroll = Button(frame1, text = "Show Payroll") #When I press the button "Show Payroll", I want it to display a text in the textbox in the frame below. I tried command = printPayroll but i dont think its working :(
        #printPayroll <- use this function to do so



        #Formatting
        btReadFile.grid(row = 1, column = 2, sticky="w")
        btShowPayroll.grid(row = 2, column = 2, sticky="w")


        #Text Window
        text = Text(window)
        text.pack()
        text.insert(END, "text displayed from btShowPayroll") #when btShowPayroll is pressed I want it to display text here!

        window.mainloop()

PayrollSummary()

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Я решил вашу проблему.

Для этого создайте метод / функцию класса PayrollSummary с именем printpayroll и вставьте в него текст «текст, отображаемый из btShowPayroll».Сделайте команду кнопки 'lambda: self.printpayroll ()', чтобы она запустила метод / функцию.


from tkinter import *

class PayrollSummary:
    def __init__(self):
        window = Tk()
        window.title("Employee Payroll")

        #Add Frame 1
        self.frame1 = Frame(window)
        self.frame1.pack()


        #Add ReadFile Button          
        self.btReadFile = Button(self.frame1, text = "Read File")

        #Text Window
        self.text = Text(window)
        self.text.pack()

        #Add ShowPayroll Button
        self.btShowPayroll = Button(self.frame1, text = "Show Payroll", command = lambda:self.printpayroll()) #When I press the button "Show Payroll", I want it to display a text in the textbox in the frame below. I tried command = printPayroll but i dont think its working :(
        #printPayroll <- use this function to do so

        #Formatting
        self.btReadFile.grid(row = 1, column = 2, sticky="w")
        self.btShowPayroll.grid(row = 2, column = 2, sticky="w")

        window.mainloop()

    def printpayroll(self):
        self.text.insert(END, "text displayed from btShowPayroll") #when btShowPayroll is pressed I want it to display text here!

PayrollSummary()

Этот код создает это окно при запуске:

Window

Вот что происходит при нажатии кнопки «Показать платежную ведомость»:

Result

Как видите, произошло то, что вы хотели.Текст выводится на экран.Это происходит потому, что текст вставляется в текстовое поле.


Некоторые рекомендации:

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

  • Я рекомендую добавить self.перед множеством виджетов tkinter, которые вы создали в своем классе, чтобы они создавались как атрибуты объектов, которые создаются как экземпляры класса.

  • Я рекомендую вам изменить код, который запускаетсякласс:

    PayrollSummaryScreen = PayrollSummary()
    

    Я бы сделал это так, чтобы был создан объект PayrollSummaryScreen и чтобы каждый из атрибутов объекта был создан.например, frame1, btReadFile, btShowPayroll и text могут быть доступны с помощью объекта.Например, вы можете скрыть текст, если хотите, извне класса, используя:

    PayrollSummaryScreen.text.pack_forget()
    

    Это может быть полезно для вас в будущем, например, если вам нужно скрыть экран «Сводка заработной платы» искрыв текстовое поле text и кнопки «Read File» и «Show Payroll», вы можете скрыть атрибут frame1 объекта.Поэтому это скрыло бы дочерние виджеты фрейма, которые являются текстовым полем «текст» и кнопками «Читать файл» и «Показать платежную ведомость».Вы можете скрыть атрибут frame1 объекта экрана сводной ведомости заработной платы, используя:

    PayrollSummaryScreen.frame1.pack_forget()
    

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


from tkinter import *

window = Tk()
window.title("Employee Payroll")

class PayrollSummary:
    def __init__(self):
        #Add Frame 1
        self.frame1 = Frame(window)
        self.frame1.pack()


        #Add ReadFile Button          
        self.btReadFile = Button(self.frame1, text = "Read File")

        #Text Window
        self.text = Text(window)
        self.text.pack()

        #Add ShowPayroll Button
        self.btShowPayroll = Button(self.frame1, text = "Show Payroll", command = lambda:self.printpayroll()) #When I press the button "Show Payroll", I want it to display a text in the textbox in the frame below. I tried command = printPayroll but i dont think its working :(
        #printPayroll <- use this function to do so

        #Formatting
        self.btReadFile.grid(row = 1, column = 2, sticky="w")
        self.btShowPayroll.grid(row = 2, column = 2, sticky="w")

        window.mainloop()

    def printpayroll(self):
        self.text.insert(END, "text displayed from btShowPayroll") #when btShowPayroll is pressed I want it to display text here!

PayrollSummaryScreen = PayrollSummary()

Надеюсь, эта дополнительная информация поможет!

0 голосов
/ 15 апреля 2019

Вам нужно добавить команду к нажатию кнопки и переместить text.insert в новую функцию следующим образом:

from tkinter import *

class PayrollSummary:
    def __init__(self):
        window = Tk()
        window.title("Employee Payroll")

        #Add Frame 1
        frame1 = Frame(window)
        frame1.pack()


        #Add ReadFile Button          
        btReadFile = Button(frame1, text = "Read File")


        #Add ShowPayroll Button
        btShowPayroll = Button(frame1, text = "Show Payroll", command = self.printPayroll) #When I press the button "Show Payroll", I want it to display a text in the textbox in the frame below. I tried command = printPayroll but i dont think its working :(
        #printPayroll <- use this function to do so



        #Formatting
        btReadFile.grid(row = 1, column = 2, sticky="w")
        btShowPayroll.grid(row = 2, column = 2, sticky="w")


        #Text Window
        self.text = Text(window)
        self.text.pack()

        window.mainloop()

    def printPayroll(self):
        self.text.insert(END, "text displayed from btShowPayroll \n") #when btShowPayroll is pressed I want it to display text here!

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