Python (Tkinter) Нажмите кнопку, чтобы текст появился в поле ввода? - PullRequest
0 голосов
/ 28 августа 2018

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

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

`# ***** Предисловие Код *****

from tkinter import *
from tkinter import ttk
import tkinter.messagebox

def new():
 tkinter.messagebox.showinfo('Window Title', 'Well, this is new...')

root = Tk()
root.title("GUI Test Version 2")
root.resizable(False, False)
root.geometry('{}x{}'.format(400, 400))

***** Главное меню *****

menu = Menu(root)
root.config(menu=menu)

subMenu = Menu(menu)
menu.add_cascade(label="File", menu=subMenu)
subMenu.add_command(label="New Experiment...", command=new)
subMenu.add_command(label="New...", command=new)
subMenu.add_separator()
subMenu.add_command(label="Exit", command=root.destroy)

editMenu = Menu(menu)
menu.add_cascade(label="Edit", menu=editMenu)
editMenu.add_command(label="Redo", command=new)

***** Панель инструментов *****

toolbar = Frame(root, bg="light blue")
toolbar.pack(side=TOP, fill=X)

***** Создание кнопок *****

class App(object):
     def __init__(self,root):
     self.root = root

     self.txt_frm = Frame(self.root, width=900, height=900)
     self.txt_frm.pack(fill="both", expand=True)
     button1 = Button(self.txt_frm,text="HELLO", command = self.hello_world)
     button1.grid(column=0,row=2, padx=2, pady=2)
     button2 = Button(self.txt_frm,text="GOODBYE", command = self.goodbye_world)
     button2.grid(column=1,row=2, padx=2, pady=2)
     button3 = Button(self.txt_frm,text="NEW", command = self.new_world, bg="red",fg="white")
     button3.grid(column=2,row=2, padx=2, pady=2)

 def hello_world(self):
        label = Label(self.txt_frm,text='HELLO WORLD!')
        label.grid(column=0,row=3)

 def goodbye_world(self):
        label = Label(self.txt_frm,text='GOODBYE WORLD!')
        label.grid(column=1,row=3)

 def new_world(self):
        label = Label(self.txt_frm,text='THIS IS A NEW WORLD!')
        label.grid(column=2,row=3)

***** Строка состояния *****

status = Label(root, text="Preparing to begin...", bd=1, relief=SUNKEN,     anchor=W) # bd = bordered, relief = ,  appear placed in screen, anchor = w (NESW) needs two other properties
status.pack(side=BOTTOM, fill=X)

***** Выполнить код *****

app = App(root)
root.mainloop()`

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Создайте метку в __init__ и используйте label.config(text=text), чтобы изменить ее текст позже. Вот пример кода:

from tkinter import *
from tkinter import ttk
import tkinter.messagebox

def new():
 tkinter.messagebox.showinfo('Window Title', 'Well, this is new...')

root = Tk()
root.title("GUI Test Version 2")
root.resizable(False, False)
root.geometry('{}x{}'.format(400, 400))
menu = Menu(root)
root.config(menu=menu)

subMenu = Menu(menu)
menu.add_cascade(label="File", menu=subMenu)
subMenu.add_command(label="New Experiment...", command=new)
subMenu.add_command(label="New...", command=new)
subMenu.add_separator()
subMenu.add_command(label="Exit", command=root.destroy)

editMenu = Menu(menu)
menu.add_cascade(label="Edit", menu=editMenu)
editMenu.add_command(label="Redo", command=new)
toolbar = Frame(root, bg="light blue")
toolbar.pack(side=TOP, fill=X)
class App(object):
    def __init__(self,root):
        self.root = root

        self.txt_frm = Frame(self.root, width=900, height=900)
        self.txt_frm.pack(fill="both", expand=True)
        button1 = Button(self.txt_frm,text="HELLO", command = self.hello_world)
        button1.grid(column=0,row=2, padx=2, pady=2)
        button2 = Button(self.txt_frm,text="GOODBYE", command = self.goodbye_world)
        button2.grid(column=1,row=2, padx=2, pady=2)
        button3 = Button(self.txt_frm,text="NEW", command = self.new_world, bg="red",fg="white")
        button3.grid(column=2,row=2, padx=2, pady=2)
        self.label = Label(self.txt_frm,text='')
        self.label.grid(column=0,row=3)
    def hello_world(self):
        self.label.config(text="HELLO WORLD!")

    def goodbye_world(self):
        self.label.config(text="GOODBYE WORLD!")

    def new_world(self):
        self.label.config(text="THIS IS A NEW WORLD!")
status = Label(root, text="Preparing to begin...", bd=1, relief=SUNKEN,     anchor=W) # bd = bordered, relief = ,  appear placed in screen, anchor = w (NESW) needs two other properties
status.pack(side=BOTTOM, fill=X)
app = App(root)
root.mainloop()
0 голосов
/ 28 августа 2018

Обычный способ чтения и записи в запись - использовать StringVar в качестве текстовой переменной. Проверьте код ниже:

from tkinter import *

root = Tk()
root.geometry('300x100')

class App(object):
     def __init__(self,root):
         self.root = root
         self.txt_frm = Frame(self.root, width=900, height=900, bg='khaki')
         self.txt_frm.pack(fill="both", expand=True)
         button1 = Button(self.txt_frm,text="Hello", command = self.hello_world)
         button1.grid(column=0,row=2, padx=2, pady=2)
         button2 = Button(self.txt_frm,text="Goodbye", command = self.goodbye_world)
         button2.grid(column=1,row=2, padx=2, pady=2)
         self.entry_var = StringVar()
         entry = Entry(self.txt_frm, textvariable=self.entry_var)
         entry.grid(column=0, row=3, columnspan=2, padx=2, pady=2)

     def hello_world(self):
            self.entry_var.set('Hello')

     def goodbye_world(self):
            self.entry_var.set('World')

app = App(root)
root.mainloop()

Я присваиваю StringVar self.entry_var записи. Затем я использую функции обратного вызова кнопки, чтобы изменить содержимое записи, изменив self.entry_var.

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