Python 3.4/Tkinter跨类变量访问
错误:Python 3.4/Tkinter跨类变量访问,python,tkinter,Python,Tkinter,错误: __author__ = 'rvncpn' import tkinter from tkinter import ttk class layOut(tkinter.Tk): volts = 0 amps = 0 ohms = 0 def updizzle(self): layOut.volts = layOut.ve.get() layOut.amps = layOut.ie.get() layOut
__author__ = 'rvncpn'
import tkinter
from tkinter import ttk
class layOut(tkinter.Tk):
volts = 0
amps = 0
ohms = 0
def updizzle(self):
layOut.volts = layOut.ve.get()
layOut.amps = layOut.ie.get()
layOut.ohms = layOut.re.get()
def __init__(self, *args, **kwargs):
tkinter.Tk.__init__(self, *args, **kwargs)
container = ttk.Frame(self)
container.grid(columns=3, rows=3, sticky='nsew')
tkinter.Tk.title(self, 'Ohms Law v2')
v = ttk.Label(container, text='Volts')
v.grid(column=0, row=0)
i = ttk.Label(container, text='Amperes')
i.grid(column=1, row=0)
r = ttk.Label(container, text='Ohms')
r.grid(column=2, row=0)
ve = ttk.Entry(container)
ve.grid(column=0, row=1)
ie = ttk.Entry(container)
ie.grid(column=1, row=1)
re = ttk.Entry(container)
re.grid(column=2, row=1)
button = ttk.Button(container, text='Button', command=layOut.updizzle)
button.grid(column=2, row=2,pady=6)
answer = ttk.Label(container, text='32095782hirjfkebfesfme')
answer.grid(column=0, row=2, columnspan=2)
class ohms(layOut):
def __init__(self):
self.v = layOut.volts
self.i = layOut.amps
self.r = layOut.ohms
self.w = []
def sorter(self):
if self.v > 0:
self.w.append('volts')
if self.i > 0:
self.w.append('amps')
if self.r > 0:
self.w.append('ohms')
def listCheck(self):
if 'volts' in self.w and 'amps' in self.w and 'ohms' in self.w:
print('you must leave one of the perimeter empty')
elif 'volts' in self.w and 'amps' in self.w:
print('resistance =', self.v / self.i)
elif 'volts' in self.w and 'ohms' in self.w:
print('amps =', self.i / self.i)
elif 'amps' in self.w and 'ohms' in self.w:
print('volts=', self.i * self.r)
else:
pass
app = layOut()
app.mainloop()
在我的生活中,我无法理解这一点,我知道这将是一件简单的事情,我要踢自己。您正在使用未绑定方法,您应该使用self
创建绑定方法。替换:
TypeError: updizzle() missing 1 required positional argument: 'self'
与:
请注意,这些项都没有存储在实例或类中;没有设置layOut.ve
、layOut.ie
或layOut.re
,因为您将ve
、ie
和re
作为本地人离开。最好在实例上设置它们(如此类推self
),然后在updizle
中再次在self
上查找它们:
button = ttk.Button(container, text='Button', command=self.updizzle)
你真的应该发布完整的回溯,而不仅仅是例外。你能试着把这个问题简化成一个小样本吗?代码应该做什么?
button = ttk.Button(container, text='Button', command=self.updizzle)
class layOut(tkinter.Tk):
volts = 0
amps = 0
ohms = 0
def updizzle(self):
self.volts = self.ve.get()
self.amps = self.ie.get()
self.ohms = self.re.get()
def __init__(self, *args, **kwargs):
tkinter.Tk.__init__(self, *args, **kwargs)
container = ttk.Frame(self)
container.grid(columns=3, rows=3, sticky='nsew')
tkinter.Tk.title(self, 'Ohms Law v2')
v = ttk.Label(container, text='Volts')
v.grid(column=0, row=0)
i = ttk.Label(container, text='Amperes')
i.grid(column=1, row=0)
r = ttk.Label(container, text='Ohms')
r.grid(column=2, row=0)
self.ve = ttk.Entry(container)
self.ve.grid(column=0, row=1)
self.ie = ttk.Entry(container)
self.ie.grid(column=1, row=1)
self.re = ttk.Entry(container)
self.re.grid(column=2, row=1)
button = ttk.Button(container, text='Button', command=layOut.updizzle)
button.grid(column=2, row=2,pady=6)
answer = ttk.Label(container, text='32095782hirjfkebfesfme')
answer.grid(column=0, row=2, columnspan=2)