【问题标题】:How to access text inside an Entry widget from a function in tkinter?如何从 tkinter 中的函数访问 Entry 小部件内的文本?
【发布时间】:2021-02-10 09:14:31
【问题描述】:

我有一个 python GUI 分配,我必须在其中创建一个 GUI 应用程序,它将在指定的输入值范围内评估单个变量函数。我们必须使用类。我写了以下代码:

from tkinter import *
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
import tkinter.font as font

class eval_interface:
    def __init__(self):
        self.root = Tk()
        self.root.title("Function Evaluator")
        self.topframe = Frame(self.root)
        self.createTopFrame()
        self.topframe.grid(row=0, column=0, columnspan=10, sticky=N + S + W + E)
        self.frame2 = Frame(self.root)
        self.createFrame2()
        self.frame2.grid(row = 1, column = 0, pady = 15, columnspan = 10, sticky = N + S + W + E)
        self.frame3 = Frame(self.root)
        self.createFrame3()
        self.frame3.grid(row=2, column=0, pady=15, columnspan=10, sticky=N + S + W + E)
        self.frame4 = Frame(self.root)
        self.frame5 = Frame(self.root)
        self.createFrame5()
        self.frame5.grid(row=4, column=0, pady=15, columnspan=10, sticky=N + S + E + W)
        self.createFrame4()
        self.frame4.grid(row = 3, column = 0, pady = 15, columnspan = 10, sticky = N+S+E+W)
        self.root.mainloop()

    def createTopFrame(self):  #Frame containing title
        title = Label(self.topframe, text="Function evaluator and plotter".center(228, " "), font=font.Font(size=17))
        title.grid(row=0, column=0, columnspan=7)

    def createFrame2(self):  #Frame containing function Entry widget
        title = Label(self.frame2, text = "Enter the function in x : ", font = font.Font(size = 14))
        title.grid(row = 0, column = 0, sticky = N + S + W + E)
        function_entry = Entry(self.frame2, width  = 150)
        function_entry.grid(row = 0, column = 1, sticky = N + S + W + E)

    def createFrame3(self):  #Frame containing range Entry widgets
        range_label = Label(self.frame3, text="Enter the range of the function from : ", font = font.Font(size = 14))
        lower_range_entry = Entry(self.frame3, width=10)
        range_label2 = Label(self.frame3, text=" to ")
        upper_range_entry = Entry(self.frame3, width=10)
        range_label.grid(row=1, column=0, sticky="nsew")
        lower_range_entry.grid(row=1, column=1)
        range_label2.grid(row=1, column=2, sticky="nsew")
        upper_range_entry.grid(row=1, column=3, sticky="nsew")

    def createFrame4(self):  #Frame containing button widgets
        btn_evaluate = Button(self.frame4, text = "Evaluate", font = font.Font(size = 14), command = self.evaluate())
        btn_plot = Button(self.frame4, text = "Plot", font = font.Font(size = 14))
        btn_clear = Button(self.frame4, text = "Clear", font = font.Font(size = 14))
        btn_exit = Button(self.frame4, text = "Exit", font = font.Font(size = 14), command = exit)
        btn_evaluate.grid(row=0, column=0, padx=10, pady=5)
        btn_plot.grid(row=0, column=1, padx=10, pady=5)
        btn_clear.grid(row=0, column=2, padx=10, pady=5)
        btn_exit.grid(row=0, column=3, padx=10, pady=5)

    def createFrame5(self):  #Frame containing Result Textbox
        res_text = Text(self.frame5, width = 95, height = 55, padx = 10)
        res_text.grid(row = 0, column = 0)

    def evaluate(self):
        x = 10

    def clear(self):
        z=12


eval_interface()

我的问题是,当单击“评估”按钮时,如何访问用户在三个条目小部件(在第 2 帧和第 3 帧中)中输入的数据?在我访问了数据并对其进行了必要的操作之后,如何在第 5 帧的文本框中显示结果? (我刚刚在评估和清除函数中编写了一些随机语句以查看输出 GUI。)

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    如果要访问evaluate()函数内部的Entry小部件,需要将三个局部变量function_entrylower_range_entryupper_range_entry更改为实例变量self.function_entryself.lower_range_entry和@ 987654328@。 Text 小部件 res_text 也是如此。然后您可以从三个Entry 小部件中获取值并将结果插入到self.res_text 内的evaluate() 函数中:

        def createFrame2(self):  #Frame containing function Entry widget
            title = Label(self.frame2, text = "Enter the function in x : ", font = font.Font(size = 14))
            title.grid(row = 0, column = 0, sticky = N + S + W + E)
            self.function_entry = Entry(self.frame2, width  = 150)
            self.function_entry.grid(row = 0, column = 1, sticky = N + S + W + E)
    
        def createFrame3(self):  #Frame containing range Entry widgets
            range_label = Label(self.frame3, text="Enter the range of the function from : ", font = font.Font(size = 14))
            self.lower_range_entry = Entry(self.frame3, width=10)
            range_label2 = Label(self.frame3, text=" to ")
            self.upper_range_entry = Entry(self.frame3, width=10)
    
            range_label.grid(row=1, column=0, sticky="nsew")
            self.lower_range_entry.grid(row=1, column=1)
            range_label2.grid(row=1, column=2, sticky="nsew")
            self.upper_range_entry.grid(row=1, column=3, sticky="nsew")
    
        ...
    
        def createFrame5(self):  #Frame containing Result Textbox
            self.res_text = Text(self.frame5, width = 95, height = 55, padx = 10)
            self.res_text.grid(row = 0, column = 0)
    
        def evaluate(self):
            # get content from entries
            x = self.function_entry.get()
            lower = self.lower_range_entry.get()
            upper = self.upper_range_entry.get()
            # example on inserting result into text box
            result = ", ".join([x, lower, upper]) # or whatever you want
            self.res_text.insert("end", result)
    
        ...
    

    command=self.evaluate() 内的 createFrame4() 也应该是 command=self.evaluate

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 2012-06-27
      • 1970-01-01
      相关资源
      最近更新 更多