【问题标题】:I'm not able to access the attributes of my class?我无法访问我班级的属性?
【发布时间】:2012-06-19 02:56:30
【问题描述】:

我正在使用 PyQt4 模块创建用户界面。我面临的问题是我无法访问“self.ftp_tableWidget”变量

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
    MainWindow.setObjectName(_fromUtf8("MainWindow"))
    MainWindow.resize(790, 610)
    self.FTP = QtGui.QWidget()
    self.FTP.setObjectName(_fromUtf8("FTP"))
    self.ftp_tableWidget = QtGui.QTableWidget(self.FTP)
    self.ftp_tableWidget.setGeometry(QtCore.QRect(40, 90, 411, 192))
    self.ftp_tableWidget.setMinimumSize(QtCore.QSize(331, 0))
    self.ftp_tableWidget.setObjectName(_fromUtf8("ftp_tableWidget"))
    self.ftp_tableWidget.setColumnCount(2)
    self.ftp_tableWidget.setRowCount(31)
    item = QtGui.QTableWidgetItem()
    self.ftp_tableWidget.setHorizontalHeaderItem(0, item)
    item = QtGui.QTableWidgetItem()
    self.ftp_tableWidget.setHorizontalHeaderItem(1, item)
    self.update_table()

这里是初始化 ftp_tableWidget 的地方。

  def update_table(self):
    cursor.execute('''SELECT MAX(SNO) FROM ftp_auth_table1''')
    entry=cursor.fetchall()
    entry=entry[0]
    count=entry[0]
    self.ftp_tableWidget.setRowCount(count)
    cursor.execute('''SELECT * FROM ftp_auth_table1''')
    entry=cursor.fetchall()

这是更新表格小部件的代码。

 def adding(self):
    self.msg=add_to()
    self.msg.show()

这段代码正在调用一个向数据库添加数据的类。

class add_to(QtGui.QDialog,Ui_MainWindow):
def __init__(self):
    super(add_to,self).__init__()
    Ui_MainWindow.__init__(self)

这段代码初始化了将数据附加到数据库的类,并调用 update_table 函数来更新表格小部件。

这是我遇到的错误

    self.ftp_tableWidget.setRowCount(count)
    AttributeError: 'add_to' object has no attribute 'ftp_tableWidget'  

规格: 我正在使用 python 2.7 和 PyQt4 模块。

根据“notbad jpeg”给出的答案编辑代码后: 类 Ui_MainWindow(对象): def init(self,mainwindow): self.setupUi(主窗口) def setupUi(self, MainWindow):

这给了我一个问题:

class add_to(QtGui.QDialog,Ui_MainWindow):
   def __init__(self):
    super(add_to,self).__init__()
    self.window=QtGui.QMainWindow()
    self.MainWindow=Ui_MainWindow(self.window)
    Ui_MainWindow.__init__(self,self.MainWindow)

这给出了一个错误:

MainWindow.setObjectName(_fromUtf8("MainWindow"))
AttributeError: 'Ui_MainWindow' object has no attribute 'setObjectName'

请任何人帮助我。

提前感谢

【问题讨论】:

  • Ui_MainWindow.__init__() 是否呼叫setupUi()
  • Blckknght:不,它没有,感谢您的注意。
  • 我稍微修改了代码,现在我的 Ui_MainWindow 中有一个 init
  • @thecreator232,您能否更新问题中的代码以反映您的更改?
  • @Andy,我更新了代码

标签: python pyqt pyqt4


【解决方案1】:

该评论说明了您的问题。您需要在调用self.setupUi()Ui_MainWindow 类中添加__init__() 方法,以便在您调用super() 时立即调用setupUi() 中的所有内容。

编辑:现在您稍微更改了代码并且收到了 __init__() 需要两个参数错误,我环顾四周,看到您的内联代码表明您需要将 MainWindow 参数传递给您的Ui_MainWindow.__init__(self, MainWindow)。然后,将 MainWindow 传递给您的 setupUi 方法。

编辑#2:改变

class add_to(QtGui.QDialog,Ui_MainWindow):
   def __init__(self):
       super(add_to,self).__init__()
       self.window=QtGui.QMainWindow()
       self.MainWindow=Ui_MainWindow(self.window)
       Ui_MainWindow.__init__(self,self.MainWindow)

到...

class add_to(QtGui.QDialog,Ui_MainWindow):
   def __init__(self):
       super(add_to,self).__init__()
       self.window=QtGui.QMainWindow()
       self.MainWindow=Ui_MainWindow(self.window)

Ui_MainWindow.__init__() 的调用是多余的,因为它会在您创建类的实例时自动调用:self.MainWindow=Ui_MainWindow(self.window)。另外,您将自身的实例作为参数传递给自身。

【讨论】:

  • 好吧,我按照你说的做了,我在我的 Ui_MainWindow 中创建了一个 init,但它仍然显示同样的问题。当我在我的 add_to 类中放置一个 Ui_MainWindow.__init__() 时。它要求一个 Ui_MainWindow 请帮助的实例
  • 是的,这是真的,但我无法找到解决方案。
  • 你能告诉我如何克服这个问题吗?提前谢谢你
  • 我现在再次编辑了代码,当 add_to 类尝试初始化 Ui_MainWindow 时,它给出了错误。我已经编辑了上面的代码。
  • :您的代码解决了第二个问题,但最初的错误仍然存​​在。我仍然不能使用 ftp_tableWidget。
猜你喜欢
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
相关资源
最近更新 更多