python-3.x - 如何为 TKINTER 中的条目总和定位 def
问题描述
按下按钮 b1 后,我试图获得 t1 和 t2 的总和。但是,我无法弄清楚 def sum(self) 的位置:因为它当前位于代码中,所以我收到错误 TypeError: sum() missing 1 required positional argument: 'self' after input in t1 and t2 then press b1。
from tkinter import *
import tkinter as tk
class Example(tk.Frame):
def __init__(self, root):
tk.Frame.__init__(self, root)
self.canvas = tk.Canvas(root, borderwidth=0, background="#ffffff")
root.geometry("1000x500")
self.frame = tk.Frame(self.canvas, background="#ffffff")
self.vsb = tk.Scrollbar(root, orient="vertical", command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.vsb.set)
self.vsb.pack(side="right", fill="y")
self.canvas.pack(side="left", fill="both", expand=True)
self.canvas.create_window((4,4), window=self.frame, anchor="nw",
tags="self.frame")
self.populate()
def populate(self):
l1=Label(self.frame,text="First Number")
l1.grid(row=0,column=0)
t1=Entry(self.frame)
t1.grid(row=0,column=1)
l2=Label(self.frame,text="Second Number")
l2.grid(row=1,column=0)
t2=Entry(self.frame)
t2.grid(row=1,column=1)
l3=Label(self.frame,text="Result")
l3.grid(row=2,column=0)
t3=Entry(self.frame)
t3.grid(row=2,column=1)
b1=Button(self.frame,text="Click For SUM",command=sum)
b1.grid(row=3,column=1)
def onFrameConfigure(self, event):
'''Reset the scroll region to encompass the inner frame'''
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
def sum(self):
a=int(self.t1.get())
b=int(self.t2.get())
c=a+b
self.t3.insert(0,c)
if __name__ == "__main__":
root=tk.Tk()
Example(root).pack(side="top", fill="both", expand=True)
root.mainloop()
解决方案
该函数需要参数self
。在 python 中,类方法(除非用@staticmethod 显式修饰self
)作为第一个参数自动传递(调用函数的对象)。
您的第一个问题是 indentation: sum(self)
不缩进,因此不被解释为 Example 类的方法,onFrameConfigure 也不是。您需要将这两个缩进与 populate() 处于相同的缩进级别
即使你修复了这个,你也会遇到另一个问题:
你还需要在创建类的时候给类赋值populate(self)
,否则它们只会存在于那个函数的范围内,你不会有好的方法访问它们。您还需要更改命令。由于您正在调用一个方法,因此您需要声明适当的命名空间(self):
def populate(self):
self.l1=Label(self.frame,text="First Number")
self.l1.grid(row=0,column=0)
...
self.b1=Button(self.frame,text="Click For SUM", command=self.sum)
self.b1.grid(row=3,column=1)
推荐阅读
- node.js - 如何获取 txt 文件的更新内容?
- f# - 如何使用 fsharp.data 上传大于 2GB 的文件
- xamarin.ios - iOS 14 本地网络隐私权限请求未触发
- google-cloud-internal-load-balancer - curl 命令:远程服务器在谷歌计算节点中的 TLS 握手后无法响应
- javascript - 从反应中的json数据生成Boostrap 4 nav
- performance - Autodesk Forge Viewer - 选择大量元素(性能)
- jquery - 如何使用 jqueryui 在表单中使用 datepicker?
- swiftui - SwiftUI 中 TextField 上的 FirstResponder & :onCommit
- javascript - VisJS 网络图无法稳定并在循环中移动
- batch-file - 用批处理文件替换csv中的非打印字符