鱼C论坛

 找回密码
 立即注册
查看: 17970|回复: 63

[技术交流] 【PyQt】初级教程

[复制链接]
发表于 2014-6-23 23:52:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 ~风介~ 于 2015-7-4 21:54 编辑

最近开始学习PyQt5,希望自己可以坚持下去!^_^
代码:
  1. #!/usr/bin/python
  2. # HelloWorld.py

  3. import sys
  4. from PyQt5 import QtWidgets#前两句载入必须的模块

  5. class HelloWorld(QtWidgets.QWidget):
  6.     def __init__(self,parent = None):#初始化
  7.         super().__init__()#使用super()方法继承父类
  8.         self.resize(250, 150)               #改变窗口部件的大小
  9.         self.setWindowTitle('Hello Word!')  #设置窗口部件标题

  10. if __name__ == '__main__':
  11.     app = QtWidgets.QApplication(sys.argv)#创建application对象,参数让我们选择启动脚本方式
  12.     helloworld = HelloWorld()#创建实例
  13.     helloworld.show()##使用QWidget的show()方法
  14.     sys.exit(app.exec_())#进入主循环
复制代码


截图:

QQ拼音截图未命名.png


本帖被以下淘专辑推荐:

  • · PyQt|主题: 45, 订阅: 73
  • · Python|主题: 245, 订阅: 51
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-6-24 00:31:52 | 显示全部楼层

PyQt\每日一练0624 显示图片

本帖最后由 ~风介~ 于 2014-8-19 23:00 编辑

程序图标就是一个小图片, 通常显示在程序标题栏的左上角。 在以下的示例中, 我们将
学习如何在 PyQt 中使用程序图标,另外我们还将学习一些新的方法。


代码:
  1. #!/usr/bin/python
  2. # icon.py

  3. import sys
  4. from PyQt5 import QtWidgets,QtGui

  5. class Icon(QtWidgets.QWidget):#创建一个继承QtWidgets.QWidget的名叫Icon新类
  6.     def __init__(self, parent = None):#调用Icon构造函数
  7.         super().__init__()#调用QtWidgets.QWidget类的构造函数
  8.         self.setGeometry(300, 300, 250, 150)#设置窗口在屏幕上的位置和设置窗口本身的大小
  9.         self.setWindowTitle('Icon')
  10.         self.setWindowIcon(QtGui.QIcon('icon.png'))#png图片和代码放在同一路径下
  11.         #setWindowIcon()方法用来设置程序图标, 它需要一个 QIcon 类型的对象作为参数

  12. if __name__ == '__main__':   
  13.     app = QtWidgets.QApplication(sys.argv)
  14.     icon = Icon()#实例化
  15.     icon.show()
  16.     sys.exit(app.exec_())
复制代码



截图:
QQ拼音截图未命名.png


附件: icon.rar (4.89 KB, 下载次数: 34)



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-25 07:47:52 | 显示全部楼层

PyQt\每日一练0625 气球提示

本帖最后由 ~风介~ 于 2014-8-22 23:53 编辑

我们可以为任何窗口部件设置一个气球提示
代码:
  1. #!/usr/bin/python
  2. # tooltip.py
  3. import sys
  4. from PyQt5 import QtWidgets,QtCore,QtGui

  5. class Tooltip(QtWidgets.QWidget):
  6.     def __init__(self, parent = None):
  7.         super().__init__()
  8.         self.setGeometry(300,300, 350, 250)#前面两个参数是位置,后两个是大小。
  9.         self.setWindowTitle('Tooltip')
  10.         self.setToolTip('This is a <b>QWidget</b> widget')
  11.         QtWidgets.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
  12.         #设置想要的字体和字体大小

  13. if __name__ == '__main__':
  14.     app = QtWidgets.QApplication(sys.argv)
  15.     tooltip = Tooltip()
  16.     tooltip.show()
  17.     sys.exit(app.exec_())
复制代码



截图:
QQ拼音截图未命名.png

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-6-25 09:06:33 | 显示全部楼层
牛!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-26 10:16:42 | 显示全部楼层

PyQt\每日一练0626 信号和槽

本帖最后由 ~风介~ 于 2014-8-23 00:34 编辑

一个显而易见的关闭窗口的方式是单击标题栏右上角的 X 标记。在接下来的示例中,
我们将展示如何用代码来关闭程序,并简要介绍 Qt 的信号和槽机制。
1.代码

  1. #!/usr/bin/python
  2. # quitbutton.py
  3. import sys
  4. from PyQt5 import QtGui, QtCore,QtWidgets

  5. class QuitButton(QtWidgets.QWidget):
  6.     def __init__(self, parent = None):
  7.         super().__init__()
  8.         self.setGeometry(300, 300, 250, 150)
  9.         self.setWindowTitle('quitbutton')
  10.         quit = QtWidgets.QPushButton('Close', self)
  11.         quit.setGeometry(10, 10, 60, 35)
  12.         quit.clicked.connect(QtWidgets.qApp.quit)

  13. if  __name__ == '__main__':
  14.     app = QtWidgets.QApplication(sys.argv)
  15.     qb = QuitButton()
  16.     qb.show()
  17.     sys.exit(app.exec_())
  18.    
  19. '''quit = QtGui.QPushButton('Close', self)
  20. quit.setGeometry(10, 10, 60, 35)
  21. 以上两句用来创建一个按钮并将其放在 QWidget 部件上,就像我们将 QWidget 部件放
  22. 在屏幕上一样。
  23. self.connect(quit, QtCore.SIGNAL('clicked()'), QtGui.qApp,QtCore.SLOT('quit()'))
  24. PyQt4 的事件处理系统建立在信号-槽机制之上。如果我们单击 quit 按钮,那么信号
  25. clicked()就会被触发,槽函数可以是 PyQt 自带的槽函数,也可以是任何 Python 可以调用的
  26. 函数等。QtCore.QObject.connect()方法可以将信号和槽函数连接起来。在我们的示例中槽函
  27. 数是 PyQt 中已定义的 quit()函数。通过 connect 方法就可以建立发送者(quit 按钮)和接受
  28. 者(应用程序对象)之间的通信。'''
复制代码



2.截图
1.png
2.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-27 20:01:57 | 显示全部楼层

PyQt\每日一练0627 确认框

本帖最后由 ~风介~ 于 2014-8-23 00:38 编辑

     默认情况下,如果我们单击了窗口标题栏上的 X 标记,窗口就会被关闭。但是有些时
候我们想要改变这一默认行为。 比如, 我们正在编辑的文件内容发生了变化, 这时若单击 X
标记关闭窗口,编辑器就应当弹出确认窗口。

代码:
  1. #!/usr/bin/python
  2. # messagebox.py
  3. import sys
  4. from PyQt5 import QtWidgets

  5. class MessageBox(QtWidgets.QWidget):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QWidget.__init__(self, parent)
  8.         self.setGeometry(300, 300, 250, 150)
  9.         self.setWindowTitle('message box')
  10.     def closeEvent(self, event):
  11.         reply = QtWidgets.QMessageBox.question(self, 'Message',
  12.         "Are you sure to quit?", QtWidgets.QMessageBox.Yes,
  13.         QtWidgets.QMessageBox.No)
  14.         if reply == QtWidgets.QMessageBox.Yes:
  15.             event.accept()
  16.         else:
  17.             event.ignore()

  18. if __name__ == '__main__':
  19.     app = QtWidgets.QApplication(sys.argv)
  20.     qb = MessageBox()
  21.     qb.show()
  22.     sys.exit(app.exec_())
  23.    
  24. '''如果我们关闭 QWidget 窗口, QCloseEvent 事件就会被触发。 要改变原有的 wdiget 行为
  25. 阻止查窗口的关闭,我们就需要重新实现 closeEvent()方法。
  26. reply = QtGui.QMessageBox.question(self, 'Message',
  27. "Are you sure to quit?", QtGui.QMessageBox.Yes,
  28. QtGui.QMessageBox.No)
  29. 通过上面的语句我们可以显示一个带有两个按钮 (Yes/No) 的消息窗口。 第一个字符串
  30. 参数'Message'在消息窗口的标题栏显示。第二个字符串参数以对话的形式显示在消息窗口
  31. 中。返回的结果被保存在 reply 变量中。
  32. if reply == QtGui.QMessageBox.Yes:
  33. event.accept()
  34. else:
  35. event.ignore()
  36. 我们使用上面的 if 语句来判断用户选择的结果。如果用户选择了 Yes 按钮,那么关闭
  37. widget 窗口并终止应用程序的动作会被允许执行。否则,关闭窗口的动作会被忽略。'''
复制代码




截图:
1.png

2.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-6-27 21:06:30 | 显示全部楼层
{:1_1:}        过来踩踩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-28 18:23:06 | 显示全部楼层

PyQt\每日一练0628 居中显示

本帖最后由 ~风介~ 于 2014-8-23 00:42 编辑

以下的脚本显示了将窗口放在屏幕的中间位置的方法。
代码:
  1. #!/usr/bin/python
  2. # center.py
  3. import sys
  4. from PyQt5 import QtWidgets
  5. class Center(QtWidgets.QWidget):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QWidget.__init__(self, parent)
  8.         self.setWindowTitle('center')
  9.         self.resize(250, 150)
  10.         self.center()
  11.     def center(self):
  12.         screen = QtWidgets.QDesktopWidget().screenGeometry()
  13.         size = self.geometry()
  14.         self.move((screen.width() - size.width()) / 2,
  15.         (screen.height() - size.height()) / 2)

  16. if  __name__ == '__main__':
  17.     app = QtWidgets.QApplication(sys.argv)
  18.     qb = Center()
  19.     qb.show()
  20.     sys.exit(app.exec_())
  21. '''self.resize()
  22. 该语句用来设置 QWidget 窗口的大小为 250 像素宽,150 像素高。
  23. screen = QtGui.QDesktopWidget().screenGeometry()
  24. 该语句用来计算出显示器的分辨率(screen.width , screen.height) 。
  25. size = self.geometry()
  26. 该语句用来获取 QWidget 窗口的大小(size.width, size.height) 。
  27. self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
  28. 该语句将窗口移动到屏幕的中间位置。'''
复制代码




截图:
QQ拼音截图未命名.png

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-28 23:51:05 | 显示全部楼层

PyQt\每日一练0629 状态栏

本帖最后由 ~风介~ 于 2014-8-23 00:43 编辑

状态栏是用来显示状态信息的串口部件。
代码:
  1. #!/usr/bin/python
  2. # statusbar.py
  3. import sys
  4. from PyQt5 import QtWidgets
  5. class MainWindow(QtWidgets.QMainWindow):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QMainWindow.__init__(self)
  8.         self.resize(250, 150)
  9.         self.setWindowTitle('statusbar')
  10.         self.statusBar().showMessage('Ready')

  11. if __name__ == '__main__':
  12.     app = QtWidgets.QApplication(sys.argv)
  13.     main = MainWindow()
  14.     main.show()
  15.     sys.exit(app.exec_())
  16.     '''self.statusBar().showMessage('Ready')
  17.     使用 QApplication 类的 statusBar()方法创建状态栏。使用 showMessage()方法将信息显
  18.     示在状态栏中'''
复制代码



截图:
QQ拼音截图未命名.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-30 18:02:26 | 显示全部楼层

PyQt\每日一练0630 菜单栏

本帖最后由 ~风介~ 于 2014-8-23 00:45 编辑

菜单栏是 GUI 程序最明显的组成部分。它由一组位于不同菜单中的命令组成。在控制
台程序中,我们必须记住那些晦涩难懂的命令。但在 GUI 程序中,通过菜单栏我们将命令
合理的放置在不同的菜单中来降低学习新应用程序的时间开销。


代码:

  1. #!/usr/bin/python
  2. # menubar.py
  3. import sys
  4. from PyQt5 import QtWidgets
  5. class MainWindow(QtWidgets.QMainWindow):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QMainWindow.__init__(self)
  8.         self.resize(250, 150)
  9.         self.setWindowTitle('menubar')
  10.         exit = QtWidgets.QAction("Exit",self, shortcut="Ctrl+Q",triggered=self.close)
  11.         menubar = self.menuBar()
  12.         file = menubar.addMenu('&File')
  13.         file.addAction(exit)

  14. if __name__ == '__main__':      
  15.     app = QtWidgets.QApplication(sys.argv)
  16.     main = MainWindow()
  17.     main.show()
  18.     sys.exit(app.exec_())
  19. '''
  20. menubar = self.menuBar()
  21. file = menubar.addMenu('&File')
  22. file.addAction(exit)
  23. 首先我们使用 QMainWindow 类的 menuBar()方法创建一个菜单栏。 然后使用 addMenu()
  24. 方法添加一个菜单。最后我们把动作对象(这里是 exit)添加到 file 菜单中。
  25. '''
复制代码

'


截图:
QQ拼音截图未命名.png

#爱上Qt#

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-1 13:05:44 | 显示全部楼层

PyQt\每日一练0701 绝对定位

本帖最后由 ~风介~ 于 2014-8-17 12:48 编辑

PyQt 中的布局管理器
布局管理器是编程中重要的一部分。 所谓布局管理是指我们在窗口中安排部件位置的方
法。 布局管理有两种工作方式: 绝对定位方式 (absolute positioning) 和布局类别方式 (layout
classes) 。
绝对定位方式
该方式下, 程序员编程指定每一个部件的位置和尺寸像素。 当使用绝对定位方式时,
需要注意以下几点:
·改变窗口大小时,窗口中部件的大小和位置不会随之改变。
·在不同的平台上,应用程序可能会看起来不尽相同。
·在应用程序中改变字体可能会导致布局混乱。
· 如果你打算改变窗口布局, 你就必须得重新书写所有部件的布局, 这一工作会非
常乏味且耗时较多。
代码:
  1. #!/usr/bin/python
  2. # absolute.py
  3. import sys
  4. from PyQt5 import QtWidgets
  5. class Absolute(QtWidgets.QWidget):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QWidget.__init__(self)
  8.         self.setWindowTitle('Communication')
  9.         label = QtWidgets.QLabel('Couldn\'t', self)
  10.         label.move(15, 10)
  11.         label = QtWidgets.QLabel('care', self)
  12.         label.move(35, 40)
  13.         label = QtWidgets.QLabel('less', self)
  14.         label.move(55, 65)
  15.         label = QtWidgets.QLabel('And', self)
  16.         label.move(115, 65)
  17.         label = QtWidgets.QLabel('then', self)
  18.         label.move(135, 45)
  19.         label = QtWidgets.QLabel('you', self)
  20.         label.move(115, 25)
  21.         label = QtWidgets.QLabel('kissed', self)
  22.         label.move(145, 10)
  23.         label = QtWidgets.QLabel('me', self)
  24.         label.move(215, 10)
  25.         self.resize(250, 150)
  26.         
  27. app = QtWidgets.QApplication(sys.argv)
  28. qb = Absolute()
  29. qb.show()
  30. sys.exit(app.exec_())
  31. '''在该示例中,我们简单是使用 move()方法来设置部件的位置。我们通过 x 和 y 坐
  32. 标来指定 QLabel 部件的位置, 坐标起点为左上角的顶点。 x 坐标从左向右增长, y 坐标
  33. 从上向下增长。'''
复制代码

截图:
QQ拼音截图未命名.png

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-12 23:11:30 | 显示全部楼层

PyQt\每日一练0702 Box 布局

本帖最后由 ~风介~ 于 2014-8-17 12:47 编辑

Box 布局
使用布局类别方式的布局管理器比绝对定位方式的布局管理器更加灵活实用。 它是
窗口部件的首先布局管理方式。最基本的布局类别是 QHBoxLayout 和 QVBoxLayout
布局管理方式,分别将窗口部件水平和垂直排列。
假设我们要将两个按钮放在窗口的右下角。 为创建该布局, 我们需要使用一个水平
Box 和一个垂直 Box, 另外为了创建必须的空白空间, 我们还需要添加一个伸缩间隔元
素(stretch factor) 。
代码:
  1. #!/usr/bin/python
  2. # boxlayout.py
  3. import sys
  4. from PyQt5 import QtWidgets
  5. class Boxlayout(QtWidgets.QWidget):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QWidget.__init__(self)
  8.         self.setWindowTitle('box layout')
  9.         ok = QtWidgets.QPushButton('OK')
  10.         cancel = QtWidgets.QPushButton('Cancel')
  11.         hbox = QtWidgets.QHBoxLayout()
  12.         hbox.addStretch(0)
  13.         hbox.addWidget(ok)
  14.         hbox.addWidget(cancel)
  15.         vbox = QtWidgets.QVBoxLayout()
  16.         vbox.addStretch(1)
  17.         vbox.addLayout(hbox)
  18.         self.setLayout(vbox)
  19.         self.resize(300, 150)
  20. app = QtWidgets.QApplication(sys.argv)
  21. qb = Boxlayout()
  22. qb.show()
  23. sys.exit(app.exec_())
  24. '''ok = QtGui.QPushButton('OK')
  25. cancel = QtGui.QPushButton('Cancel')
  26. 以上两句用来创建两个按钮(OK 和 Cancel 按钮) 。
  27. 17
  28. hbox = QtGui.QHBoxLayout()
  29. hbox.addStretch(1)
  30. hbox.addWidget(ok)
  31. hbox.addWidget(cancel)
  32. 以上四句用来创建一个水平 box 布局,然后加入一个伸缩间隔元素与两个按钮。
  33. vbox = QtGui.QVBoxLayout()
  34. vbox.addStretch(1)
  35. vbox.addLayout(hbox)
  36. 为创建需要的布局, 我们使用以上语句创建了一个垂直 box 布局并将水平 box 布局
  37. 放入水平 box 布局中。
  38. self.setLayout(vbox)
  39. 最后我们设置窗口的主布局。'''
复制代码



截图:
QQ拼音截图未命名.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-12 23:40:21 | 显示全部楼层
支持介介哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-13 00:04:40 | 显示全部楼层
~风介~ 发表于 2014-7-13 00:01
努力吧,希望可以把漏的部分补回来~
NO ONE IS RICH ENOUGH TO BUY BACK HIS PAST!

{:7_181:}加油哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-14 00:38:37 | 显示全部楼层

PyQt\每日一练0703 网格布局

本帖最后由 ~风介~ 于 2014-8-17 12:46 编辑

网格布局
最通用的布局类别是网格布局 (QGridLayout) 。 该布局方式将窗口空间划分为许多行和
列。要创建该布局方式,我们需要使用 QGridLayout 类。
代码:
  1. #!/usr/bin/python
  2. # gridlayout.py
  3. import sys
  4. from PyQt5 import QtWidgets
  5. class GridLayout(QtWidgets.QWidget):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QWidget.__init__(self)
  8.         self.setWindowTitle('grid layout')
  9.         names =['Cls', 'Bck', '', 'Close', '7', '8', '9', '/',
  10.         '4', '5', '6', '*', '1', '2', '3',
  11.         '-', '0', '.', '=', '+']
  12.         grid = QtWidgets.QGridLayout()
  13.         j = 0
  14.         pos = [(0, 0), (0, 1), (0, 2), (0, 3),
  15.         (1, 0), (1, 1), (1, 2), (1, 3),
  16.         (2, 0), (2, 1), (2, 2), (2, 3),
  17.         (3, 0), (3, 1), (3, 2), (3, 3),
  18.         (4, 0), (4, 1), (4, 2), (4, 3)]
  19.         for i in names:
  20.             button = QtWidgets.QPushButton(i)
  21.             if j == 2:
  22.                 #pass
  23.                 grid.addWidget(QtWidgets.QLabel(''), 0, 2)
  24.             else:
  25.                 grid.addWidget(button, pos[j][0], pos[j][1])
  26.                 #print(j,'  ',pos[j][0] , '===' ,pos[j][1])
  27.             j = j + 1
  28.         self.setLayout(grid)
  29. app = QtWidgets.QApplication(sys.argv)
  30. qb = GridLayout()
  31. qb.show()
  32. sys.exit(app.exec_())
  33. '''在这个示例中, 我们创建一组按网格布局的按钮。 为了填补 Bck 和 Close 按钮之间的空
  34. 白,我们使用 QLabel 部件。
  35. grid = QtGui.QGridLayout()
  36. 该语句创建了一个网格布局。
  37. if j == 2:
  38. grid.addWidget(QtGui.QLabel(''), 0, 2)
  39. else:
  40. grid.addWidget(button, pos[j][0], pos[j][1])
  41. 使用 addWidget()方法,我们将部件加入到网格布局中。addWidget()方法的参数依次为
  42. 要加入到局部的部件,行号和列号。'''
复制代码

截图:
QQ拼音截图未命名.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-14 00:41:55 | 显示全部楼层

PyQt\每日一练0704 网格布局

本帖最后由 ~风介~ 于 2014-8-17 12:46 编辑

部件在网格布局中可以跨越多行或多列。我们将下面的示例中演示该情况。
代码:
  1. #!/usr/bin/python
  2. # gridlayout2.py
  3. import sys
  4. from PyQt5 import QtWidgets
  5. class GridLayout(QtWidgets.QWidget):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QWidget.__init__(self)
  8.         self.setWindowTitle('grid layout')
  9.         title = QtWidgets.QLabel('Title')
  10.         authot = QtWidgets.QLabel('Author')
  11.         review = QtWidgets.QLabel('Review')
  12.         titleEdit = QtWidgets.QLineEdit()
  13.         authorEdit = QtWidgets.QLineEdit()
  14.         reviewEdit = QtWidgets.QLineEdit()
  15.         grid = QtWidgets.QGridLayout()
  16.         grid.setSpacing(10)
  17.         grid.addWidget(title, 1, 0)
  18.         grid.addWidget(titleEdit, 1, 1)
  19.         grid.addWidget(authot, 2, 0)
  20.         grid.addWidget(authorEdit, 2, 1)
  21.         grid.addWidget(review, 3, 0)
  22.         grid.addWidget(reviewEdit, 3, 1, 5, 1)
  23.         self.setLayout(grid)
  24.         self.resize(350, 300)
  25. app = QtWidgets.QApplication(sys.argv)
  26. qb = GridLayout()
  27. qb.show()
  28. sys.exit(app.exec_())
  29. '''grid = QtGui.QGridLayout()
  30. grid.setSpacing(10)
  31. 通过以上两句, 我们创建了一个网格布局, 并将该布局中的部件间隔 (同行的横向间隔)
  32. 20设为 10 个字距。grid.addWidget(reviewEdit, 3, 1, 5, 1)
  33. 我们可以为加入网格布局的部件设置行列跨度,在上面的语句中,我们将 reviewEdit
  34. 部件的行跨度设置为 5,列跨度设置为 1。'''
复制代码


截图:
QQ拼音截图未命名.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 00:35:51 | 显示全部楼层

PyQt\每日一练0705 信号与槽

本帖最后由 ~风介~ 于 2014-8-17 12:45 编辑

PyQt5 的事件与信号
在本章的学习中,我们将介绍发生在应用程序中的事件和信号。
事件
事件 (Events) 是 GUI 程序中很重要的一部分。 它由用户或系统产生。 当我们调用程序
的 exec_()方法时,程序就会进入主循环中。主循环捕获事件并将它们发送给相应的对象进
行处理。为此,奇趣公司(Trolltech)引入了信号与槽机制。
信号与槽
当用户单击一个按钮, 拖动一个滑块或进行其它动作时, 相应的信号就会被发射。 除此
之外,信号还可以因为环境的变化而被发射。比如一个运行的时钟将会发射时间信号等。 而
所谓的槽则是一个方法,该方法将会响应它所连接的信号。在 Python 中,槽可以是任何可
以被调用的对象。
代码:
  1. #!/usr/bin/python
  2. # sigslot.py
  3. import sys
  4. from PyQt5 import QtWidgets, QtCore
  5. class SigSlot(QtWidgets.QWidget):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QWidget.__init__(self, parent)
  8.         self.setWindowTitle('signal & slot')
  9.         lcd = QtWidgets.QLCDNumber(self)
  10.         slider = QtWidgets.QSlider(QtCore.Qt.Horizontal, self)
  11.         vbox = QtWidgets.QVBoxLayout()
  12.         vbox.addWidget(lcd)
  13.         vbox.addWidget(slider)
  14.         self.setLayout(vbox)
  15.         slider.valueChanged.connect(lcd.display)
  16.         self.resize(250, 150)
  17. app = QtWidgets.QApplication(sys.argv)
  18. qb = SigSlot()
  19. qb.show()
  20. sys.exit(app.exec_())
  21. '''在这个示例中, 我们创建了一个 LCD 显示器和一个滑块。 通过拖动滑块我们可改变 LCD
  22. 显示器的数字。
  23. self.connect(slider, QtCore.SIGNAL('valueChanged(int)'), lcd, QtCore.SLOT('display(int)'))
  24. 这里我们将滑块的 valueChanged()信号连接到 LCD 显示器的 display()槽函数上。 连接方
  25. 法 connect 有 4 个参数:信号发送者对象(这里是 slider 对象) ,要发射的信号(这里是
  26. valueChanged 信号) ,信号的接收者对象(这里是 lcd 对象) ,对信号做出响应的槽函数(这
  27. 里是 display 方法) 。'''
复制代码



截图:
QQ拼音截图未命名.png


评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +5 收起 理由
小甲鱼 + 10 + 10 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 00:43:13 | 显示全部楼层

PyQt\每日一练0706 预定义对话框

本帖最后由 ~风介~ 于 2014-8-17 12:45 编辑

PyQt5 中的对话框
对话窗口和对话框是现代 GUI 应用程序必不可少的一部分。生活中“对话”被定义为
发生在两人或更多人之间的会话。而在计算机世界, “对话”则是人与应用程序之间的“会
话” 。人机对话的形式有在输入框内键如内容,修改已有的数据,改变应用程序的设置等。
对话框在人机交互中扮演着非常重要的角色。
从本质上说,只存在两种形式的对话框:预定义对话框和定制对话框。
预定义对话框
QInputDialog 输入对话框
QInputDialog 提供了一种获取用户单值数据的简洁形式。 它接受的数据有字符串, 数字
和列表中的一项数据等。
代码:
  1. #!/usr/bin/python
  2. # inputdialog.py
  3. import sys
  4. from PyQt5 import QtWidgets, QtCore,QtGui
  5. class InputDialog(QtWidgets.QWidget):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QWidget.__init__(self)
  8.         self.setGeometry(300, 300, 350, 80)
  9.         self.setWindowTitle('InputDialog')
  10.         self.button = QtWidgets.QPushButton('Dialog', self)
  11.         self.button.setFocusPolicy(QtCore.Qt.NoFocus)
  12.         self.button.move(20, 20)
  13.         self.button.clicked.connect(self.showDialog)
  14.         self.setFocus()
  15.         self.label = QtWidgets.QLineEdit(self)
  16.         self.label.move(130, 22)
  17.     def showDialog(self):
  18.         text,ok = QtWidgets.QInputDialog.getText(self, 'Input Dialog','Enter your name:')
  19.         if ok:
  20.             self.label.setText(text)
  21. app =  QtWidgets.QApplication(sys.argv)
  22. icon = InputDialog()
  23. icon.show()
  24. sys.exit(app.exec_())
  25. '''本示例包含一个按钮和一个行编辑部件。 单机按钮会弹出输入对话框, 以获取用户输入
  26. 的文本数据。该文本数据将会显示在行编辑部件中。
  27. text, ok = QtGui.QInputDialog.getText(self, 'Input Dialog', 'Enter your name:')
  28. 该语句用来显示一个输入对话框。第一个参数'Input Dialog'是对话框的标题。第二个参
  29. 数'Enter your name'将作为提示信息显示在对话框内。 该对话框将返回用户输入的内容和一个
  30. 布尔值, 如果用户单击 OK 按钮确认输入, 则返回的布尔值为 true, 否则返回的布尔值为 false。'''
复制代码



截图:
1.png



2.png


3.png


评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +5 收起 理由
小甲鱼 + 10 + 10 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-15 03:12:05 | 显示全部楼层
不错丫,介介~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-15 07:28:10 | 显示全部楼层
支持,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 03:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表