免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6440 | 回复: 3
打印 上一主题 下一主题

pyqt4 Slot SIGNAL 一个简单测试! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-13 21:27 |只看该作者 |倒序浏览
怎么写才能实现点击按钮然后退出程序呢??


  1. >>>import sys
  2. >>>from PyQt4 import QtCore, QtGui
  3. >>>app=QtGui.QApplication(sys.argv)
  4. >>>win = QtGui.QPushButton("Hello Word",None)
  5. >>>win.connect(win,QtCore.SIGNAL("clicked()"),win,QtCore.SLOT("close()"))
  6. >>>win.show()
  7. >>>app.exec_()
复制代码

这个时候点击屏幕按钮就可以退出了

  1. #!/usr/bin/env python
  2. import sys
  3. from PyQt4 import QtCore, QtGui

  4. class HelloButton(QtGui.QPushButton):

  5.         def __init__(self,parent=None):
  6.                 QtGui.QPushButton.__init__(self, parent)
  7.                 self.setText("Hello World")

  8. class HelloWindow(QtGui.QMainWindow):

  9.         def __init__(self,parent=None):
  10.                 QtGui.QMainWindow.__init__(self,parent)
  11.                 self.button=HelloButton(self)
  12.                 self.setCentralWidget(self.button)

  13. def main(args):
  14.         app=QtGui.QApplication(args)
  15.         win=HelloWindow()
  16.         win.connect(win,QtCore.SIGNAL("clicked()"),win,QtCore.SLOT("close()"))
  17.         win.show()
  18.         app.connect(app, QtCore.SIGNAL("lastWindowClosed()"),
  19.                       app, QtCore.SLOT("quit()"))
  20.         app.exec_()

  21. if __name__=="__main__":
  22.         main(sys.argv)
复制代码


正确代码
win.connect(win,QtCore.SIGNAL("clicked()"),win,QtCore.SLOT("close()"))

下面是之前出现过的错误!
QtCore.SLOT("quit()"))
错误提示
Object::connect: No such slot QMainWindow::quit()

问了一下单位搞python的哥们帮我该了一下,不过还是不是很清楚!有点郁闷!

主要就是这句话
win.connect(win,QtCore.SIGNAL("clicked()"),win,QtCore.SLOT("close()"))

win本身就是一个button 为什么第一个对象还要写win.button 呢还有就是SIGNAL  和 SLOT 具体怎么用还是不理解!

win.connect(win,QtCore.SIGNAL("clicked()"),win,QtCore.SLOT("close()"))

希望拿给高手给解释解释SIGNAL 和 SLOT 的用法!

[ 本帖最后由 kai0200 于 2006-8-14 11:22 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-08-13 23:27 |只看该作者
有错误信息吗?

论坛徽章:
0
3 [报告]
发表于 2006-08-14 09:43 |只看该作者
运行正常我就是想点击“HelloButton ” 的时候退出程序,实际上我就是对这个signal 和slot  没搞懂怎么调用!

论坛徽章:
0
4 [报告]
发表于 2006-08-14 16:58 |只看该作者

ui_gongzi.py 一个用qt生成的程序!

我在其中一行加了注释


  1. # -*- coding: utf-8 -*-

  2. # Form implementation generated from reading ui file 'untitled.ui'
  3. #
  4. # Created: Mon Aug 14 14:26:51 2006
  5. #      by: PyQt4 UI code generator 4.0.1
  6. #
  7. # WARNING! All changes made in this file will be lost!

  8. import sys
  9. from PyQt4 import QtCore, QtGui

  10. class Ui_gongzi(object):
  11.     def setupUi(self, gongzi):
  12.         gongzi.setObjectName("gongzi")
  13.         gongzi.resize(QtCore.QSize(QtCore.QRect(0,0,400,300).size()).expandedTo(gongzi.minimumSizeHint()))

  14.         self.verticalLayout = QtGui.QWidget(gongzi)
  15.         self.verticalLayout.setGeometry(QtCore.QRect(20,120,160,80))
  16.         self.verticalLayout.setObjectName("verticalLayout")

  17.         self.vboxlayout = QtGui.QVBoxLayout(self.verticalLayout)
  18.         self.vboxlayout.setMargin(0)
  19.         self.vboxlayout.setSpacing(6)
  20.         self.vboxlayout.setObjectName("vboxlayout")

  21.         self.lineEdit = QtGui.QLineEdit(self.verticalLayout)
  22.         self.lineEdit.setObjectName("lineEdit")
  23.         self.vboxlayout.addWidget(self.lineEdit)

  24.         self.verticalLayout_2 = QtGui.QWidget(gongzi)
  25.         self.verticalLayout_2.setGeometry(QtCore.QRect(20,20,160,80))
  26.         self.verticalLayout_2.setObjectName("verticalLayout_2")

  27.         self.vboxlayout1 = QtGui.QVBoxLayout(self.verticalLayout_2)
  28.         self.vboxlayout1.setMargin(0)
  29.         self.vboxlayout1.setSpacing(6)
  30.         self.vboxlayout1.setObjectName("vboxlayout1")

  31.         self.label = QtGui.QLabel(self.verticalLayout_2)
  32.         self.label.setObjectName("label")
  33.         self.vboxlayout1.addWidget(self.label)

  34.         self.verticalLayout_3 = QtGui.QWidget(gongzi)
  35.         self.verticalLayout_3.setGeometry(QtCore.QRect(260,130,111,71))
  36.         self.verticalLayout_3.setObjectName("verticalLayout_3")

  37.         self.vboxlayout2 = QtGui.QVBoxLayout(self.verticalLayout_3)
  38.         self.vboxlayout2.setMargin(0)
  39.         self.vboxlayout2.setSpacing(6)
  40.         self.vboxlayout2.setObjectName("vboxlayout2")

  41.         self.pushButton = QtGui.QPushButton(self.verticalLayout_3)
  42.         self.pushButton.setObjectName("pushButton")
  43.         self.vboxlayout2.addWidget(self.pushButton)

  44.         self.retranslateUi(gongzi)
  45.         QtCore.QMetaObject.connectSlotsByName(gongzi)

  46.     def retranslateUi(self, gongzi):
  47.         gongzi.setWindowTitle(QtGui.QApplication.translate("gongzi", "Form", None, QtGui.QApplication.UnicodeUTF8))
  48.         self.lineEdit.setText(QtGui.QApplication.translate("gongzi", "1111111111", None, QtGui.QApplication.UnicodeUTF8))
  49. #        self.label.setText(QtGui.QApplication.translate("gongzi", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))
  50.         self.pushButton.setText(QtGui.QApplication.translate("gongzi", "PushButton", None, QtGui.QApplication.UnicodeUTF8))

复制代码


下面是一个可执行的程序,目的就是把你输入的东西显示出来!


  1. #!/usr/bin/env python
  2. #! -*- coding: gb2312 -*-
  3. import sys
  4. from PyQt4 import QtCore, QtGui

  5. from ui_gongzi import Ui_gongzi

  6. class Gongzi(QtGui.QWidget):
  7.         def __init__(self, parent=None):
  8.                 QtGui.QWidget.__init__(self, parent)
  9.                 self.ui = Ui_gongzi()
  10.                 self.ui.setupUi(self)
  11.                
  12. #                self.ui.pushButton.setObjectName("pushButton1")
  13. # 调用类的事件
  14. #                self.ui.pushButton.connect(self.ui.pushButton,
  15. #                        QtCore.SIGNAL("clicked()"),
  16. #                        self,QtCore.SLOT("close()"))

  17. # 按按钮以后把lineEdit 的内容显示到lable
  18.                 self.ui.pushButton.connect(self.ui.pushButton,
  19.                         QtCore.SIGNAL("clicked()"),self.printa)


  20. # lineEdit 取输入的字段用下面的操作
  21. # a = QtCore.QString(win.text())
  22.                 self.value = QtCore.QString(self.ui.lineEdit.text())
  23. # lable 输出内容
  24. #                self.ui.label.setText(QtGui.QApplication.translate(self.value)
  25.                 self.ui.label.setText(QtGui.QApplication.translate("gongzi",
  26.                         "%s" % self.value, None, QtGui.QApplication.UnicodeUTF8))
  27.                

  28.         def printa(self):
  29.                 print "%s" % self.value
  30.                 self.value = QtCore.QString(self.ui.lineEdit.text())
  31.                 self.ui.label.setText(QtGui.QApplication.translate("gongzi",
  32.                    "%s" % self.value, None, QtGui.QApplication.UnicodeUTF8))
  33. if __name__ == "__main__":
  34.         app = QtGui.QApplication(sys.argv)
  35.         gongzi = Gongzi()
  36. #        gongzi.ui.pushButton.connect(gongzi.ui.pushButton,
  37. #                        QtCore.SIGNAL("clicked()"),
  38. #                        gongzi.ui.pushButton,QtCore.SLOT("close"))
  39.         gongzi.show()
  40.         sys.exit(app.exec_())

复制代码


测了一下还能用,不过语句写的很烂!将就能用!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP