免费注册 查看新帖 |

Chinaunix

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

PyQt4的一些问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-02 12:41 |只看该作者 |倒序浏览
我想用PyQt4做一个简单的程序,就是和Mysql通信,然后实现CRUD一些操作。

我想让查询的结果显示到table上,请问要怎么做呢?

还有,我用QTDesigner4 设计好界面了 然后通过pyuic4 ui_***.py ***.ui来转换完成.py文件了

我在shell下 python ui_***.py没有显示出来,看了下py文件,没有执行显示的语句,
我要是用的话怎么用呢?

请熟悉PYQT的前辈门帮助帮助我

谢谢了



注:MysqlDb PyQt4 模块 Linux System

论坛徽章:
0
2 [报告]
发表于 2009-09-02 12:43 |只看该作者
非常急用, 请知道的热心帮助下我

谢谢了

论坛徽章:
0
3 [报告]
发表于 2009-09-03 08:53 |只看该作者
我郁闷

怎么没有人来告诉我一下呢?

论坛徽章:
0
4 [报告]
发表于 2009-09-03 10:40 |只看该作者
看看这篇文章,可能有帮助
http://www.informit.com/articles ... =30649&seqNum=7

还有PyQt wiki
http://www.diotavelli.net/PyQtWiki

[ 本帖最后由 nonultimate 于 2009-9-3 10:42 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-09-03 11:17 |只看该作者
首先 谢谢你的回答
我有这本书

等了一天终于有人回复了

能不能给个例子代码。。

论坛徽章:
0
6 [报告]
发表于 2009-09-03 17:02 |只看该作者
你看看PYQT自带的例子就明白了,”ui_***.py“ 只是界面的python代码,你需要再建一个py文件import ”ui_***“ , 例如:
你用命令后:pyuic4 test.ui > test_ui.py后

下一步是创建一个test.py文件:

import sys
from PyQt4 import QtCore, QtGui

from test_ui import Ui_Form


class MyForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Form()
        self.ui.setupUi(self)


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyForm()
    myapp.show()
    sys.exit(app.exec_())

网上有个中文教程,你可以看看附件的例子,很清楚的。

Introduction_to_PyQT4.chm

622.16 KB, 下载次数: 67

论坛徽章:
0
7 [报告]
发表于 2009-09-04 19:17 |只看该作者
Qt和python都能够进行数据库操作,PyQt与MySQL等数据库通信的关键是signals and slots处理。将Qt视图对象作为信号发送者,python对象作为信号接受者(槽),然后实现该python对象方法即可,类似Javascript中的事件绑定机制。实现Qt与python的“事件绑定”,要用connect方法。

关于Qt中connect方法的定义:

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) const

bool QObject::connect ( const QObject * sender, const char * signal, const char * member ) const

关于PyQt中的connect定义:
bool connect (QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType = Qt.AutoConnection)
bool connect (QObject, SIGNAL(), callable, Qt.ConnectionType = Qt.AutoConnection)

这是我写的一个简单例子,读取、添加、删除书籍列表。使用MV思想,实现BookModel (python对象)与BookView (qt对象),BookModel负责数据模型操作,BookView负责视图的更新与“事件绑定”。为了方便起见使用sqlite3进行测试,要用mysql请自行修改。数据保存操作暂未实现,有兴趣的话可以自己去实现。

  1. # -*- coding: utf-8 -*-
  2. import sys
  3. import re
  4. #import MySQLdb
  5. import sqlite3
  6. from PyQt4.Qt import *

  7. '''
  8. DB_HOST = 'localhost'
  9. DB_USER = 'root'
  10. DB_PASSWORD = 'manager'
  11. DB_NAME = 'test'
  12. '''

  13. class Model():
  14.     def execute(self, query, params=''):
  15.         #conn = MySQLdb.connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
  16.         conn = sqlite3.connect('book.db')
  17.         cur = conn.cursor()
  18.         if params != '':
  19.             cur.execute(query, params)
  20.         else:
  21.             cur.execute(query)
  22.         if re.search(r'^SELECT', query, re.I):
  23.             result = cur.fetchall()
  24.         else:
  25.             if cur.rowcount > 0:
  26.                 result = True
  27.             else:
  28.                 result = False
  29.         cur.close()
  30.         conn.close()

  31.         return result

  32. class BookModel(Model):
  33.     def getList(self):
  34.         return self.execute('SELECT title, author, published FROM book')

  35.     def delete(self, id):
  36.         return self.execute('DELETE FROM book WHERE id=%d' % id)

  37.     def save(self, book):
  38.         if book.has_key('id'):
  39.             id = book.pop('id')
  40.             return self.execute('UPDATE book SET %s=? WHERE id=%d' % ('=?, '.join(book.keys()), id), book.values())
  41.         else:
  42.             return self.execute('INSERT INTO book(title, author, published) values(?, ?, ?)', book.values())

  43. class BookView(QMainWindow):
  44.     def __init__(self, parent=None):
  45.         QMainWindow.__init__(self, parent)
  46.         self.setWindowIcon(QIcon('qt.png'))
  47.         self.setWindowTitle(u'书籍列表')
  48.         self.setFixedSize(600, 400)
  49.         self.center()

  50.         action1 = QAction(u'添加', self)
  51.         action2 = QAction(u'保存', self)
  52.         action3 = QAction(u'删除', self)
  53.         action4 = QAction(u'退出', self)
  54.         action1.setShortcut('Ctrl+N')
  55.         action2.setShortcut('Ctrl+S')
  56.         action3.setShortcut('Ctrl+D')
  57.         action4.setShortcut('Ctrl+Q')
  58.         self.connect(action1, SIGNAL('triggered()'), self.action1Clicked)
  59.         self.connect(action2, SIGNAL('triggered()'), self.action2Clicked)
  60.         self.connect(action3, SIGNAL('triggered()'), self.action3Clicked)
  61.         self.connect(action4, SIGNAL('triggered()'), SLOT('close()'))

  62.         menubar = self.menuBar()
  63.         menu1 = menubar.addMenu(u'编辑')
  64.         menu1.addAction(action1)
  65.         menu1.addAction(action2)
  66.         menu1.addAction(action3)
  67.         menu1.addSeparator()
  68.         menu1.addAction(action4)

  69.         self.statusBar().showMessage(u'双击项目进行编辑')

  70.         table = QTableWidget()
  71.         self.setCentralWidget(table)
  72.         table.setColumnCount(4)
  73.         table.setHorizontalHeaderItem(0, QTableWidgetItem(u'序号'))
  74.         table.setHorizontalHeaderItem(1, QTableWidgetItem(u'书名'))
  75.         table.setHorizontalHeaderItem(2, QTableWidgetItem(u'作者'))
  76.         table.setHorizontalHeaderItem(3, QTableWidgetItem(u'年份'))
  77.         table.setColumnWidth(0, 40)
  78.         table.setColumnWidth(1, 350)
  79.         table.setColumnWidth(2, 150)
  80.         table.setColumnWidth(3, 50)
  81.         table.verticalHeader().setVisible(False)

  82.     def center(self):
  83.         screen = QDesktopWidget().screenGeometry()
  84.         size = self.geometry()
  85.         self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)

  86.     def action1Clicked(self):
  87.         table = self.centralWidget()
  88.         table.insertRow(table.rowCount())

  89.     def action2Clicked(self):
  90.         messageBox = QMessageBox(self)
  91.         messageBox.setWindowTitle(u'对不起')
  92.         messageBox.setText(u'该功能暂未实现!')
  93.         messageBox.show()

  94.     def action3Clicked(self):
  95.         table = self.centralWidget()
  96.         row = table.removeRow(table.currentRow())

  97.     def addItems(self, items):
  98.         table = self.centralWidget()
  99.         table.setRowCount(len(items))
  100.         i = 0
  101.         for item in items:
  102.             table.setItem(i, 0, QTableWidgetItem(unicode(i + 1)))
  103.             table.setItem(i, 1, QTableWidgetItem(item[0]))
  104.             table.setItem(i, 2, QTableWidgetItem(item[1]))
  105.             table.setItem(i, 3, QTableWidgetItem(unicode(item[2])))
  106.             i += 1

  107. def main():
  108.     app = QApplication(sys.argv)
  109.     model = BookModel()
  110.     view = BookView()
  111.     view.addItems(model.getList())
  112.     view.show()
  113.     sys.exit(app.exec_())

  114. if __name__ == '__main__':
  115.     main()
复制代码


附代码: book.7z (3.54 KB, 下载次数: 86)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP