python-3.x 无法使用tkinter找到属性

izj3ouym  于 2023-01-06  发布在  Python
关注(0)|答案(1)|浏览(217)

我有这个错误的问题,有人能告诉我什么错误与我的代码。我完全新的python编码使用tkinter。
我找不到什么问题,我试图解决它,我不能得到任何修复这个领域。
我试图找到哪里的属性错误,我检查每一行,我无法找到错误发生的区域

import tkinter as tk
import math as mt

class truepositioncal:
  def __init__(self):
    
    #create main window
    self.main_window = tk.Tk()
    
    #Main Window Title
    self.main_window.title('True Position Calculator')

    #Create Frame
    self.maxtrueposition_frame = tk.Frame()
    self.nom_x_frame = tk.Frame()
    self.nom_y_frame = tk.Frame()
    self.act_x_frame = tk.Frame()
    self.act_y_frame = tk.Frame()
    self.nom_dia_frame = tk.Frame()
    self.tol_pos_frame = tk.Frame()
    self.tol_neg_frame = tk.Frame()
    self.result_frame = tk.Frame()
    self.calculate_frame = tk.Frame()

    #prompt label Max True position
    self.promptlabelmaxpos = tk.Label(self.maxtrueposition_frame, text = 'Enter Max Position Deviation:')
    #Input Max True Position
    self.maxposdev = tk.Entry(self.maxtrueposition_frame, width = 10)
    self.promptlabelmaxpos.pack(side = 'left')
    self.maxposdev.pack(side = 'left')

    #Prompt label nominal X 
    self.labeldrawingpara_x = tk.Label(self.nom_x_frame, text = 'Enter Nominal X Value:')
    self.nominal_x = tk.Entry(self.nom_x_frame, width=10)

    #pack to left (nominal X)
    self.labeldrawingpara_x.pack(side = 'left')
    self.nominal_x.pack(side = 'left')

    #Prompt label nominal y 
    self.labeldrawingpara_y = tk.Label(self.nom_y_frame, text = 'Enter Nominal Y Value:')
    self.nominal_y = tk.Entry(self.nom_y_frame, width=10)
    self.labeldrawingpara_y.pack(side = 'left')
    self.nominal_y.pack(side = 'left')

    #Prompt label actual X 
    self.labelact_x = tk.Label(self.act_x_frame, text = 'Enter Actual X Value:')
    self.act_x = tk.Entry(self.act_x_frame, width=10)
    self.labelact_x.pack(side = 'left')
    self.act_x.pack(side = 'left')

        #Prompt label Actual Y 
    self.labelact_y = tk.Label(self.act_y_frame, text = 'Enter Actual Y Value:')
    self.act_y = tk.Entry(self.act_y_frame, width=10)
    self.labelact_y.pack(side = 'left')
    self.act_y.pack(side = 'left')

        #Prompt label Nominal Diameter 
    self.labelnomdia = tk.Label(self.nom_dia_frame, text = 'Enter Nominal Diameter Value:')
    self.nom_dia = tk.Entry(self.nom_dia_frame, width=10)
    self.labelnomdia.pack(side = 'left')
    self.nom_dia.pack(side = 'left')  

        #Prompt label tolerance positive 
    self.labeltolpos = tk.Label(self.tol_pos_frame, text = 'Enter Tolerance (+) Value:')
    self.tol_pos = tk.Entry(self.tol_pos_frame, width=10)
    self.labeltolpos.pack(side = 'left')
    self.tol_pos.pack(side = 'left')  

        #Prompt label tolerance Negative 
    self.labeltolneg = tk.Label(self.tol_neg_frame, text = 'Enter Tolerance (-) Value:')
    self.tol_neg = tk.Entry(self.tol_neg_frame, width=10)
    self.labeltolneg.pack(side = 'left')
    self.tol_neg.pack(side = 'left')  
    
    #Pack into one
    self.maxtrueposition_frame.pack()
    self.nom_x_frame.pack()
    self.nom_y_frame.pack()
    self.act_x_frame.pack()
    self.act_y_frame.pack()
    self.nom_dia_frame.pack()
    self.tol_pos_frame.pack()
    self.tol_neg_frame.pack()

    #Create and pack the widgets for the average     
    self.result_label = tk.Label(self.result_frame,text='True Position Result:')

    self.value = tk.StringVar()
    self.results_label = tk.Label(self.result_frame,
textvariable=self.result)

    self.result_label.pack(side='left') 
    self.results_label.pack(side='left')

    self.calc_button = tk.Button(self.calculate_frame, text='calculate',
command=self.caltruepos)

    self.calculate_button.pack(side = 'left')
  
    tk.mainloop()

def caltruepos(self):

  #Change string into float numbers
  self.maxtrueposition = float(self.maxposdev.get())
  self.nom_x = float(self.nominal_x.get())
  self.nom_y = float(self.nominal_y.get())
  self.act_x = float(self.act_x.get())
  self.act_y = float(self.act_y.get())

  #calculate true position results
  x = self.nom_x - self.act_x
  y = self.nom_y - self.act_y
  square_root = mt.sqrt(x * 2 + y * 2)
  true_pos_result = (2 * square_root)

  self.value.set(true_pos_result)

  

#def trueposmmclmc(self):
  
  #self.nom_dia = float(self.nom_dia.get())
  #self.tol_pos = float(self.tol_pos.get())
  #self.tol_neg = float(self.tol_neg.get())

  #calculate true position mmc
  #mmc_a = (self.nom_dia - self.tol_pos)
  #mmc_b = (mmc_a - self.nom_dia + self.maxtrueposition)
  
trueposcal_a = truepositioncal()

qxsslcnc

qxsslcnc1#

错误就是告诉你哪里出错了,你从来没有在任何地方定义过self.result,但是你试图把它作为一个变量来使用。
如果您确实打算将self.result用作变量,则必须在使用之前定义它。

self.result= tk.StringVar()
self.results_label = tk.Label(self.result_frame,
textvariable=self.result)

您的代码确实在该代码块之前定义了一个名为self.value的变量-您是否打算使用该变量而不是self.result?如果是,则修复方法是使用self.value而不是self.result

self.value = tk.StringVar()
self.results_label = tk.Label(self.result_frame,
textvariable=self.value)
#            ^^^^^^^^^^

相关问题