Python Tkinter文本/滚动条小部件未按预期运行



我有一个家庭作业,我几乎已经完成了,但滚动条没有按预期运行。当我专注于文本时,它有效,但当我试图移动滚动条或使用箭头时,它不起作用。

from tkinter import *
class LoanCalculator:
    def __init__(self):
        window = Tk()
        window.title("Loan Calculator")
        frame = Frame(window)
        frame.pack()
        Label(frame, text="Loan Amount").grid(row=1,column=1, sticky=W)
        self.loanAmmount = StringVar()
        self.entryLoan = Entry(frame, textvariable=self.loanAmmount, justify=RIGHT)
        Label(frame, text="Years").grid(row=1, column=3,sticky=W)
        self.years = StringVar()
        self.entryYears = Entry(frame, textvariable=self.years, justify=RIGHT)
        btCalc = Button(frame, text="Calculate Loan", command=self.Calculate)
        scrollbar = Scrollbar(frame)
        self.text = Text(frame, width=60, height=10,wrap=WORD, yscrollcommand=scrollbar.set)
        self.entryLoan.grid(row=1, column=2)
        self.entryYears.grid(row=1, column=4)
        btCalc.grid(row=1, column=5)
        self.text.grid(row=2,column=1,columnspan=4)
        scrollbar.grid(row=2, column=5, sticky="NSW")

        window.mainloop()
    def Calculate(self):
        self.text.delete("1.0", END)
        self.text.insert(END, "{0:<20s}{1:<20s}{2:<20s}".format("Interest Rate", "Monthly Payment", "Total Payment"))
        aIR = 5.0
        mIR = 0
        mP = 0
        tP = 0
        fLA = 0
        fYear = 0
        lA = 0
        year = 0
        textToOut = ""
        while aIR <= 8.0:
            fLA = self.loanAmmount.get()
            fYear = self.years.get()
            lA = int(fLA)
            year = int(fYear)
            mIR = aIR / 1200
            mP = lA * mIR / (1 - (pow(1 / (1 + mIR), year * 12)))
            tP = mP * year * 12
            textToOut = format(aIR, ">5.3f") + "%" + format(mP, "20.2f") + format(tP, "20.2f") + "n"
            self.text.insert(END, textToOut)
            aIR += 1.0 / 8

LoanCalculator()

编辑我已经改变了我的问题,去掉了文本部分,因为我已经找到了解决方法。

您需要配置滚动条以在滚动时运行操作(更新文本区域的视图)。在定义文本区域后添加这行代码。

scrollbar.config(command=self.text.yview)

所以__init__的代码块应该是这样的:

def __init__(self):
    window = Tk()
    window.title("Loan Calculator")
    frame = Frame(window)
    frame.pack()
    Label(frame, text="Loan Amount").grid(row=1,column=1, sticky=W)
    self.loanAmmount = StringVar()
    self.entryLoan = Entry(frame, textvariable=self.loanAmmount, justify=RIGHT)
    Label(frame, text="Years").grid(row=1, column=3,sticky=W)
    self.years = StringVar()
    self.entryYears = Entry(frame, textvariable=self.years, justify=RIGHT)
    btCalc = Button(frame, text="Calculate Loan", command=self.Calculate)
    scrollbar = Scrollbar(frame)
    self.text = Text(frame, width=60, height=10,wrap=WORD, yscrollcommand=scrollbar.set)
    scrollbar.config(command=self.text.yview)
    self.entryLoan.grid(row=1, column=2)
    self.entryYears.grid(row=1, column=4)
    btCalc.grid(row=1, column=5)
    self.text.grid(row=2,column=1,columnspan=4)
    scrollbar.grid(row=2, column=5, sticky="NSW")

最新更新