TK: 计算三角形的面积

TK代码,将textvariable绑定,改为直接使用text属性设置。以下是修改后的代码,关键改动已用注释标出:

TK

import tkinter as tk
import tkinter.ttk as ttk
import tkinter.messagebox as msgbox  # 添加缺失的导入

class app(tk.Frame):
    def __init__(self):
        self.root = tk.Tk()
        super().__init__(self.root)
        self.root.geometry('300x224')
        self.root.title('计算三角形的面积')
        self.create_widgets()
        self.mainloop()

    def create_widgets(self):
        # 底边输入区域
        self.label1 = tk.Label(text='底', font=('Segoe UI', 9), anchor='w')
        self.label1.place(x=40, y=24, width=80, height=24)
        
        self.entry1 = tk.Entry(font=('Segoe UI', 9))
        self.entry1.place(x=88, y=24, width=80, height=24)
        self.entry1.insert(0, '11')  # 设置初始值
        
        # 高度输入区域
        self.label2 = tk.Label(text='高', font=('Segoe UI', 9), anchor='w')
        self.label2.place(x=40, y=72, width=80, height=24)
        
        self.entry2 = tk.Entry(font=('Segoe UI', 9))
        self.entry2.place(x=88, y=72, width=80, height=24)
        # 直接设置text属性
        self.entry2.insert(0, '')  # 初始为空
        
        # 结果显示区域
        self.label3 = tk.Label(text='面积:', font=('Segoe UI', 9), anchor='w')
        self.label3.place(x=40, y=120, width=224, height=24)
        
        # 按钮区域
        self.button1 = tk.Button(
            text='计算',
            font=('Segoe UI', 9),
            command=self.button1_Command
        )
        self.button1.place(x=24, y=176, width=80, height=24)
        self.button2 = tk.Button(
            text='清空',
            font=('Segoe UI', 9),
            command=self.button2_Command
        )
        self.button2.place(x=112, y=176, width=80, height=24)
        self.button3 = tk.Button(
            text='退出',
            font=('Segoe UI', 9),
            command=self.button3_Command
        )
        self.button3.place(x=200, y=176, width=80, height=24)

   def button1_Command(self):
        """计算三角形面积"""
        try:
            # 直接从Entry获取文本值
            base = float(self.entry1.get())
            height = float(self.entry2.get())
            area = 0.5 * base * height
            self.label3.config(text=f'面积:{area:.2f}')
        except ValueError:
            msgbox.showerror("输入错误", "请输入有效的数字")
			
    def button2_Command(self):
        """清空输入和结果"""
        # 直接操作Entry组件清空内容
        self.entry1.delete(0, tk.END)
        self.entry2.delete(0, tk.END)
        self.label3.config(text='面积:')
    def button3_Command(self):
        """退出程序"""
        self.root.destroy()
app()

主要修改点说明:

  1. 移除所有StringVar变量
    • 删除了self.entry1_valueself.entry2_value的定义
    • 删除了所有textvariable属性绑定
  2. 直接使用text属性设置初始值
    • 使用entry.insert(0, '初始值')替代StringVar.set()
    • 使用entry.get()替代StringVar.get()
  3. 调整清空逻辑
    • 使用entry.delete(0, tk.END)替代StringVar.set('')
    • 直接操作组件而不是通过中间变量
  4. 修复导入问题
    • 添加了缺失的tkinter.messagebox导入
  5. 代码结构优化
    • 简化了组件创建时的参数传递
    • 使用更紧凑的语法结构
    • 保持所有原有功能不变
      这种修改方式完全移除了Tkinter变量绑定机制,直接通过组件方法操作界面元素。虽然失去了自动双向绑定的优势,但代码更直接简单,适合小型应用。对于需要频繁数据绑定的复杂应用,建议保留textvariable机制。
posted @ 2025-12-09 21:44  nxhujiee  阅读(3)  评论(0)    收藏  举报