【引子】

在PyQt5自带教程中,地址簿(address book)程序没有完全实现界面与业务逻辑分离。

本文我打算用eric6+PyQt5对其进行改写,以实现界面与逻辑完全分离。

 

【概览】


1、界面:
用 eric6 与 PyQt5 实现python的极速GUI编程(系列04)---- PyQt5自带教程:地址簿(address book)


2、功能简介:
程序有三种操作模式:浏览模式、添加模式、编辑模式。 其实现的功能都显式的体现在各个按钮上


3、主要步骤:
1)、在eric6中新建项目,新建窗体,取名为 addressbook.ui 文件

2)、(自动打开)进入PyQt5 Desinger,编辑图形界面,保存

3)、回到eric 6,对上一步得到的界面文件 addressbook.ui 文件右击,编译窗体,得到 Ui_addressbook.py 文件

4)、然后再对 addressbook.ui 文件右击,生成对话框代码,得到 addressbook.py 文件。(在addressbook.py中添加自己的程序逻辑)

5)、py2exe打包成exe文件(此步略)


4、涉及的知识点:
import sys, pickle

from PyQt5.QtCore import pyqtSlot, QFile, QIODevice, Qt, QTextStream
from PyQt5.QtWidgets import QWidget, QDialog, QLabel, QLineEdit, QPushButton, QHBoxLayout,  QMessageBox, QFileDialog,  QApplication



【正文】
1、一般的步骤省略不表,接上面主要步骤第二步:

在Qt设计师中,将行编辑框(lineEdit)、文本编辑框(textEdit)、及十一个按钮(pushButton)的对象名(objectName)分别设置如下:

lineEdit_name(姓名输入框)

textEdit_address(地址输入框)

pushButton_add(添加 按钮)

pushButton_edit(编辑 按钮)

pushButton_remove(删除 按钮)

pushButton_find(查找 按钮)

pushButton_submit(提交 按钮)

pushButton_cancel(取消 按钮)

pushButton_load(导入 按钮)

pushButton_save(保存 按钮)

pushButton_export(导出 按钮)

pushButton_previous(前一个 按钮)

pushButton_next(后一个 按钮)

用 eric6 与 PyQt5 实现python的极速GUI编程(系列04)---- PyQt5自带教程:地址簿(address book)

 

2、关闭Qt设计师,回到eric6

先右击addressbook.ui 文件,编译窗体,得到 Ui_addressbook.py 文件

然后再次右击addressbook.ui 文件,生成对话框代码,

在弹窗中勾选十一个按钮的 on_x_clicked() 事件,确定,得到 addressbook.py 文件。

用 eric6 与 PyQt5 实现python的极速GUI编程(系列04)---- PyQt5自带教程:地址簿(address book)

 

3、对addressbook.py 文件执行下面四步处理

1)、清空所有注释

2)、去掉一个多余的点,将

from .Ui_addressbook import Ui_Form

变成:

from Ui_addressbook import Ui_Form

3)、将所有clicked()下的代码改写为pass

    @pyqtSlot()
    def on_pushButton_add_clicked(self):
        pass
    
    @pyqtSlot()
    def on_pushButton_edit_clicked(self):
        pass
    
    # ...

4)、在 addressbook.py 文件最后面加上下面几句代码:

if __name__ == '__main__':
    import sys
    from PyQt5.QtWidgets import QApplication
    
    app = QApplication(sys.argv)
    dlg = Dialog()
    dlg.show()
    sys.exit(app.exec_())

最后,addressbook.py 看起来是这个样子:

 1 # -*- coding: utf-8 -*-
 2 
 3 from PyQt5.QtCore import pyqtSlot
 4 from PyQt5.QtWidgets import QDialog
 5 
 6 from Ui_addressbook import Ui_Dialog
 7 
 8 
 9 class Dialog(QDialog, Ui_Dialog):
10     def __init__(self, parent=None):
11         super(Dialog, self).__init__(parent)
12         self.setupUi(self)
13     
14     @pyqtSlot()
15     def on_pushButton_add_clicked(self):
16         pass
17     
18     @pyqtSlot()
19     def on_pushButton_edit_clicked(self):
20         pass
21     
22     @pyqtSlot()
23     def on_pushButton_remove_clicked(self):
24         pass
25     
26     @pyqtSlot()
27     def on_pushButton_find_clicked(self):
28         pass
29     
30     @pyqtSlot()
31     def on_pushButton_submit_clicked(self):
32         pass
33     
34     @pyqtSlot()
35     def on_pushButton_cancel_clicked(self):
36         pass
37     
38     @pyqtSlot()
39     def on_pushButton_load_clicked(self):
40         pass
41     
42     @pyqtSlot()
43     def on_pushButton_save_clicked(self):
44         pass
45     
46     @pyqtSlot()
47     def on_pushButton_export_clicked(self):
48         pass
49     
50     @pyqtSlot()
51     def on_pushButton_previous_clicked(self):
52         pass
53     
54     @pyqtSlot()
55     def on_pushButton_next_clicked(self):
56         pass
57 
58 if __name__ == '__main__':
59     import sys
60     from PyQt5.QtWidgets import QApplication
61     
62     app = QApplication(sys.argv)
63     dlg = Dialog()
64     dlg.show()
65     sys.exit(app.exec_())
View Code

相关文章:

  • 2021-09-23
  • 2022-12-23
  • 2021-06-09
  • 2021-05-18
  • 2021-06-11
  • 2022-02-16
  • 2022-12-23
  • 2021-09-09
猜你喜欢
  • 2021-12-27
  • 2021-07-24
  • 2021-10-23
  • 2021-07-04
  • 2021-10-22
  • 2022-02-03
相关资源
相似解决方案