如何将多个文本字段输入及其功能连接到 tkinter python 中的一个按钮?

How can I connect multiple text field inputs along with their functions to one button in tkinter python?

我遇到这个问题,我需要使用唯一的按钮(在本例中为计算)来显示其他函数的值。使用其文本输入字段时显示第一个函数,但不显示另一个函数。

我试过复制,使用相同的代码希望更改名称。


import tkinter as tk
from functools import partial

n_num = list(map(int, input('Enter mean numbers: ').split()))
n = len(n_num)

get_sum = sum(n_num)
mean = get_sum / n

print("Mean / Average is: " + str(mean))



def mean_result (label_mean_result,num):
    n_num = list(map(int,num.get()))
    n = len(n_num)

    get_sum = sum(n_num)
    mean = get_sum /n
    label_mean_result.config(text=f"Mean Result = {mean}")
    return


def median_result (label_median_result,num):
    n_num = list(map(int,num.get()))
    n = len(n_num)
    n_num.sort()

    if n % 2 == 0:
        median1 = n_num[n // 2]
        median2 = n_num[n // 2 - 1]
        median = (median1 + median2) / 2
    else:
        median = n_num[n // 2]
        label_median_result.config(text=f"Median Result = {median}")
    #print("Median is: " + str(median))
    return


root = tk.Tk()
root.geometry('400x200+100+200')

root.title('Final program')


## Mean input and output
meanInput = tk.StringVar()

labelMean = tk.Label(root, text="Mean input:").grid(row=1, column=0)

labelResult = tk.Label(root)

labelResult.grid(row=7, column=2)

entryNum1 = tk.Entry(root, textvariable=meanInput).grid(row=1, column=2)

mean_result = partial(mean_result, labelResult, meanInput)

buttonCal = tk.Button(root, text="Calculate", command=mean_result).grid(row=3, column=0)

#####

medianInput = tk.StringVar()

labelMedian = tk.Label(root, text="Median input:").grid(row=2, column=0)

labelResult2 = tk.Label(root)

labelResult2.grid(row=7, column=2)

entryNum2 = tk.Entry(root, textvariable=medianInput).grid(row=2, column=2)

median_result= partial(median_result, labelResult2, medianInput)

root.mainloop()

当我使用本例中唯一的按钮(计算)从两个函数输入值时,我希望得到结果。因此,我很想知道如何将多个功能连接到一个按钮并显示它们的结果。例如,第一个函数显示 "mean function" 结果,但是;第二个函数 "median" 未连接并在单击“计算”按钮时显示。

import tkinter as tk
from statistics import median, mode, stdev

class Calculator(tk.Frame):
    """Calculate mean median mode and standard deviation"""
    def __init__(self, parent, *args, **kwargs):
        #setup tkinter frame
        tk.Frame.__init__(self, parent, *args, **kwargs)
        parent = parent

        self.makeWidgets()

    def makeWidgets(self):
        """make and pack various widgets"""
        self.meanLabel = tk.Label(self, text="")
        self.medianLabel = tk.Label(self, text="")
        self.modeLabel = tk.Label(self, text="")
        self.sdLabel = tk.Label(self, text="")
        self.entry = tk.Entry(self)
        self.calcuateButton = tk.Button(self, text="Calculate!", command = self.calculate)
        self.meanLabel.pack()
        self.medianLabel.pack()
        self.modeLabel.pack()
        self.sdLabel.pack()
        self.entry.pack()
        self.calcuateButton.pack()

    def calculate(self):
        self.listOfNumbers = self.entry.get()
        #get what is inputed into the entry widget
        self.listOfNumbers = self.listOfNumbers.split(' ')
        #split the input string by spaces
        for ind, i in enumerate(self.listOfNumbers):
            #convert each item in the list of strings of numbers to ints
            self.listOfNumbers[ind] = int(i)
        #calculate!
        self.calcMean()
        self.calcMedian()
        self.calcMode()
        self.calcSd()

    def calcMean(self):
        """calculate the mean"""
        mean = sum(self.listOfNumbers)/len(self.listOfNumbers)
        self.meanLabel.config(text='mean = ' + str(mean))
        return mean

    def calcMedian(self):
        """calculate the median"""
        med = median(self.listOfNumbers)
        self.medianLabel.config(text='median = ' + str(med))
        return med

    def calcMode(self):
        """calculate the mode"""

        Mode = max(set(self.listOfNumbers), key=self.listOfNumbers.count)
        self.modeLabel.config(text='mode = ' + str(Mode))
        return Mode

    def calcSd(self):
        """calculate the standard deviation"""
        sd = stdev(self.listOfNumbers)
        self.sdLabel.config(text='Standard deviation = ' + str(sd))
        return sd

if __name__ == '__main__':
    root = tk.Tk()
    root.title('calculate mean, median, mode and standard deviation')
    root.geometry('400x200')
    Calculator(root).pack(side="top", fill="both", expand=True)
    root.mainloop() 

现在这可能与您拥有的有很大不同,但这是可扩展的,您可以根据自己的兴趣抽象事物。我只是觉得它更具可读性

您在示例中计算了中位数,只是认为使用统计模块会更简洁。 Mean 已经很干净了

希望对您有所帮助:)

编辑;包括模式和 sd;