用tkinter和循环格式化和显示输出的问题

时间:2019-04-16 19:21:27

标签: python python-3.x tkinter

我正在尝试在tkinter GUI中正确设置程序格式,但是由于某些原因,我收到了错误消息:

    product += ('%-10s%-10s%-0s%-0s') % (str(names[i])+ str(addedHours[i]) + str(payOut) + "\n") TypeError: not enough arguments for format string

所需的输出: enter image description here

以下是与该问题相关的代码片段(请注意,名称/小时/薪水和---部分工作正常,而变量产品下的代码却行不通)

    def printPayroll(self):

        i = 0
        product = ""
        for y in names:

            payOut = float(wage[i]) * float(addedHours[i])
            product += ('%-10s%-10s%-0s%-0s') % (str(names[i])+ str(addedHours[i]) + str(payOut) + "\n")

            i += 1

        self.text.insert(END,("%-10s%-10s%-0s") % ('Name', 'Hours', 'Pay\n'))
        self.text.insert(END,("%-10s%-10s%-0s") % ('---','-----','---\n'))

        self.text.insert(END, product)

1 个答案:

答案 0 :(得分:1)

您收到的错误消息TypeError: not enough arguments for format string告诉您确切的问题是什么。

考虑以下代码行:

product += ('%-10s%-10s%-0s%-0s') % (str(names[i])+ str(addedHours[i]) + str(payOut) + "\n") 

上面的代码在功能上与此相同:

s = str(names[i]) + str(addedHours[i]) + str(payOut) + "\n"
product += ('%-10s%-10s%-0s%-0s') % s

您的格式字符串需要四个参数,但您只给出了一个。简单的解决方案是将每个+替换为,

product += ('%-10s%-10s%-0s%-0s') % (str(names[i]), str(addedHours[i]),  str(payOut), "\n")