鱼C论坛

 找回密码
 立即注册
楼主: ~风介~

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

[复制链接]
发表于 2014-7-15 09:16:12 | 显示全部楼层
支持,最近都在学Qt
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-15 09:47:55 | 显示全部楼层
支持啊,期待天天有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-15 11:29:13 | 显示全部楼层

想给你那个也评分的,但超过了24小时最大评分数了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-15 13:30:03 | 显示全部楼层
支持一个,介介加油!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-15 13:36:40 | 显示全部楼层
支持一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

PyQt\每日一练0707 颜色对话框

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

QColorDialog 颜色对话框
QcolorDialog 提供了用于选择颜色的对话框。
代码:
  1. #!/usr/bin/python
  2. # colordialog.py
  3. import sys
  4. from PyQt5 import QtWidgets, QtCore,QtGui
  5. class ColorDialog(QtWidgets.QWidget):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QWidget.__init__(self)
  8.         color = QtGui.QColor(0, 0, 0)
  9.         self.setGeometry(300, 300, 250, 180)
  10.         self.setWindowTitle('ColorDialog')
  11.         self.button = QtWidgets.QPushButton('Dialog', self)
  12.         self.button.setFocusPolicy(QtCore.Qt.NoFocus)
  13.         self.button.move(20, 20)
  14.         self.button.clicked.connect(self.showDialog)
  15.         self.setFocus()
  16.         self.widget = QtWidgets.QWidget(self)
  17.         self.widget.setStyleSheet('QWidget {background-color: %s}' %
  18.         color.name())
  19.         self.widget.setGeometry(130, 22, 100, 100)
  20.     def showDialog(self):
  21.         col = QtWidgets.QColorDialog.getColor()
  22.         if col.isValid():
  23.             self.widget.setStyleSheet('QWidget {background-color: %s}' %col.name())

  24. app = QtWidgets.QApplication(sys.argv)
  25. qb = ColorDialog()
  26. qb.show()
  27. sys.exit(app.exec_())

  28. '''以上示例程序显示了一个按钮和一个 QWidget 部件,该 widget 部件的初始背景颜色为
  29. 黑色。使用颜色对话框 QcolorDialog,我们可以改变 widget 部件的背景色。
  30. col = QtGui.QColorDialog.getColor()
  31. 这一行语句用来弹出颜色对话框。
  32. if col.isValid():
  33. self.widget.setStyleSheet('QWidget {background-color: %s}' % col.name())
  34. 以上的语句首先检测颜色时候可用。 如果用户单击了颜色对话框的取消按钮, 则对话框
  35. 将不返回任何可用的颜色。 如果颜色可用, 我们就使用 stylesheets 设置 widget 部件的背景色。'''
复制代码



截图:
1.png



2.png



3.png


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

使用道具 举报

 楼主| 发表于 2014-7-15 23:45:54 | 显示全部楼层

PyQt\每日一练0708 字体对话框

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

QFontDialog 字体对话框
字体对话框用来一个用来这是字体的对话框部件。
代码:
  1. #!/usr/bin/python
  2. # fontdialog.py
  3. import sys
  4. from PyQt5 import QtGui, QtCore,QtWidgets
  5. class FontDialog(QtWidgets.QWidget):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QWidget.__init__(self)
  8.         hbox = QtWidgets.QHBoxLayout()
  9.         self.setGeometry(300, 300, 250, 110)
  10.         self.setWindowTitle('FontDialog')
  11.         button = QtWidgets.QPushButton('Dialog', self)
  12.         button.setFocusPolicy(QtCore.Qt.NoFocus)
  13.         button.move(20, 20)
  14.         hbox.addWidget(button)

  15.         button.clicked.connect(self.showDialog)
  16.         self.label = QtWidgets.QLabel('I Love FishC', self)
  17.         self.label.move(130, 20)
  18.         hbox.addWidget(self.label, 1)
  19.         self.setLayout(hbox)
  20.     def showDialog(self):
  21.         font, ok = QtWidgets.QFontDialog.getFont()
  22.         if ok:
  23.             self.label.setFont(font)
  24.             
  25. app = QtWidgets.QApplication(sys.argv)
  26. cd = FontDialog()
  27. cd.show()
  28. sys.exit(app.exec_())

  29. '''在本示例中, 我们在主界面中显示了一个按钮和一个标签。 单机按钮后, 用户可在弹出
  30. 字体对话框中选择字体来修改标签中的字体样式。
  31. hbox.addWidget(self.label, 1)
  32. 该语句将 labe 标签加入到 hbox 布局中,并通过第二个参数 1 设置 label 的大小是可变
  33. 的。该设置是必须的,因为在用户选择不同的字体时,label 标签中的字体可能会变大,若
  34. 不进行该设置,标签中的内容就可能不会被全部显示。
  35. font, ok = QtGui.QFontDialog.getFont()
  36. 该语句将弹出字体对话框。
  37. if ok:
  38. self.label.setFont(font)
  39. 在用户选择了字体并单击 OK 按钮后,使用标签对象的 setFont 方法设置标签内容的字
  40. 体。'''
复制代码



截图:
1.png




2.png



3.png


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

使用道具 举报

 楼主| 发表于 2014-7-15 23:50:26 | 显示全部楼层

PyQt\每日一练0709 文件对话框

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

QFileDialog 文件对话框
文件对话框允许用户选择文件或文件夹,被选择的文件可进行读或写操作。
代码:
  1. #!/usr/bin/python
  2. # openfiledialog.py
  3. import sys
  4. from PyQt5 import QtGui, QtCore,QtWidgets
  5. class OpenFile(QtWidgets.QMainWindow):
  6.     def __init__(self, parent = None):
  7.         QtWidgets.QWidget.__init__(self, parent)
  8.         self.setGeometry(300, 300, 350, 300)
  9.         self.setWindowTitle('OpenFile')
  10.         self.textEdit = QtWidgets.QTextEdit()
  11.         self.setCentralWidget(self.textEdit)
  12.         self.statusBar()
  13.         self.setFocus()
  14.         exit = QtWidgets.QAction(QtGui.QIcon('icons/open.png'), 'Open', self)
  15.         exit.setShortcut('Ctrl+O')
  16.         exit.setStatusTip('Open new file')
  17.         exit.triggered.connect(self.showDialog)
  18.         menubar = self.menuBar()
  19.         file = menubar.addMenu('&File')
  20.         file.addAction(exit)
  21.     def showDialog(self):
  22.         filename = QtWidgets.QFileDialog.getOpenFileName(self, 'Open file', './')
  23.         #print(filename)
  24.         file = open(filename[0])
  25.         data = file.read()
  26.         self.textEdit.setText(data)
  27.         
  28. app = QtWidgets.QApplication(sys.argv)
  29. cd = OpenFile()
  30. cd.show()
  31. sys.exit(app.exec_())

  32. '''我们在本示例程序中显示了一个菜单栏, 一个状态栏和一个被设置为中心部件的文本编
  33. 辑器。其中状态栏的状态信息只有在用户想要打开文件时才会显示。单击菜单栏中的 Open
  34. 选项将弹出文件对话框供用户选择文件。被选择的文件内容将被显示在文本编辑器部件中。
  35. class OpenFile(QtGui.QMainWindow):
  36. ...
  37. self.textEdit = QtGui.QTextEdit()
  38. self.setCentralWidget(self.textEdit)
  39. 本示例程序是基于 QMainWindow 窗口部件的, 因为我们需要将文本编辑器设置为中心
  40. 部件 (QWidget 部件类没有提供 setCentralWidget 方法) 。 无须依赖布局管理器, QMainWindow
  41. 即可轻松完成设置中心部件的工作(使用 setCentralWidget 方法) 。
  42. filename = QtGui.QFileDialog.getOpenFileName(self, 'Open file', './')
  43. 该语句将弹出文件对话框。getOpenFileName()方法的第一个字符串参数'Open File'将显
  44. 示在弹出对话框的标题栏。 第二个字符串参数用来指定对话框的工作目录。 默认情况下文件
  45. 过滤器被设置为不过滤任何文件(所有工作目录中的文件/文件夹都会被显示) 。
  46. ile = open(filename)
  47. data = file.read()
  48. self.textEdit.setText(data)
  49. 以上三行语句将读取被选择的文件并将其内容显示在文本编辑器中。'''
复制代码



截图:
1.png



2.png



3.png


评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
拈花小仙 + 5 + 5 请不要无意义灌水!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2014-7-17 10:44:35 | 显示全部楼层

PyQt\每日一练0710 单选框

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

PyQt4 中的部件
部件是构建应用程序的基础元素。PyQt4 工具包拥有大量的种类繁多的部件。比如: 按
钮,单选框,滑块,列表框等任何程序员在完成其工作时需要的部件。本本章的学习中, 我
们将介绍一些有用的部件。
QCheckBox 单选框
单选框具有两个状态: 被选中或未被选中。 它看起来像一个附件了标签的方框。 当用户
选择或取消选择时,单选框就会发射一个 stateChanged()信号。
代码:
  1. #!/usr/bin/python
  2. # checkbox.py
  3. import sys
  4. from PyQt5 import QtGui, QtCore,QtWidgets
  5. class CheckBox(QtWidgets.QWidget):
  6. def __init__(self, parent = None):
  7. QtWidgets.QWidget.__init__(self, parent)
  8. self.setGeometry(300, 300, 250, 150)
  9. self.setWindowTitle('Checkbox')
  10. self.cb = QtWidgets.QCheckBox('Show title', self)
  11. self.cb.setFocusPolicy(QtCore.Qt.NoFocus)
  12. self.cb.move(10, 10)
  13. self.cb.toggle()
  14. self.cb.stateChanged.connect(self.changeTitle)
  15. def changeTitle(self, value):
  16. if self.cb.isChecked():
  17. self.setWindowTitle('Checkbox')
  18. else:
  19. self.setWindowTitle('Unchecked')

  20. app = QtWidgets.QApplication(sys.argv)
  21. w = CheckBox()
  22. w.show()
  23. sys.exit(app.exec_())

  24. '''
  25. 在本示例中,我们创建了一个用来改变窗口标题的单选框。
  26. self.cb = QtGui.QCheckBox('Show title', self)
  27. 该语句用来创建一个标签信息为'Show title'的单选框。
  28. self.connect(self.cb, QtCore.SIGNAL('stateChanged()'), self.changeTitle)
  29. 这里我们将用户定义的 changeTitle()函数与单选框的 stateChanged()信号连接起来。 自定
  30. 义的 changeTitle()函数将重置窗口的标题。
  31. self.cb.setFocusPolicy(QtCore.Qt.NoFocus)
  32. 默认情况下单选框接受聚焦, 被聚焦的表现形式为单选框的标签被一个薄薄的矩形所覆
  33. 盖。 这个矩形看起来回有些太过严肃, 所以我们使用以上代码行将单选框的聚焦样式修改为
  34. Qt.NoFocus 的无聚焦样式。
  35. self.cb.toggle()
  36. 初始状态下我们设置了窗口的标题, 因此我们需要使用以上代码行将单选框选上。 在默
  37. 认情况下,单选框是未被选中的
  38. '''
复制代码
截图:
1.png

2.png

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
拈花小仙 + 5 + 5 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2014-7-17 10:47:14 | 显示全部楼层

PyQt\每日一练0711 滑块

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

QSlider 滑块、QLabel 标签
滑块部件由一个简单的操控杆构成,用户可以通过向前或向后滑动滑块来选择数据。 这
种选择数据的方式对一些特殊的任务来说比单纯的提供一个数据或使用 spin box 调整数据
大小的方式要自然与友好的多。而标签部件则用来显示文本或图片。
在以下的示例中, 我们将在窗口中显示一个滑块和一个标签。 这次我们将在标签部件中
显示图片,并使用滑块来控制其显示内容。
代码:
  1. #!/usr/bin/python
  2. # slider-label.py
  3. import sys
  4. from PyQt5 import QtGui, QtCore,QtWidgets
  5. class SliderLabel(QtWidgets.QWidget):
  6. def __init__(self, parent = None):
  7. QtWidgets.QWidget.__init__(self, parent)
  8. self.setGeometry(300, 300, 250, 150)
  9. self.setWindowTitle('SliderLabel')
  10. self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal, self)
  11. self.slider.setFocusPolicy(QtCore.Qt.NoFocus)
  12. self.slider.setGeometry(30, 40, 100, 30)
  13. self.slider.valueChanged.connect(self.changeValue)
  14. self.label = QtWidgets.QLabel(self)
  15. self.label.setPixmap(QtGui.QPixmap('mute.png'))
  16. self.label.setGeometry(160, 40, 80, 30)
  17. def changeValue(self, value):
  18. pos = self.slider.value()
  19. if pos == 0:
  20. self.label.setPixmap(QtGui.QPixmap('mute.png'))
  21. elif 0 < pos <= 30:
  22. self.label.setPixmap(QtGui.QPixmap('min.png'))
  23. elif 30 < pos < 80:
  24. self.label.setPixmap(QtGui.QPixmap('med.png'))
  25. else:
  26. self.label.setPixmap(QtGui.QPixmap('max.png'))

  27. app = QtWidgets.QApplication(sys.argv)
  28. w = SliderLabel()
  29. w.show()
  30. sys.exit(app.exec_())

  31. '''
  32. 在这个示例中我们模拟一个音量控制的场景, 通过拖动滑块来改变标签部件中的图片显
  33. 示。
  34. self.slider = QtGui.QSlider(QtCore.Qt.Horizontal, self)
  35. 通过该语句我们创建了一个水平滑块部件。
  36. self.label = QtGui.QLabel(self)
  37. self.label.setPixmap(QtGui.QPixmap('icons/mute.png'))
  38. 以上两行语句用来创建一个标签部件并将 mute.png 加入到该部件中显示。
  39. self.connect(self.slider, QtCore.SIGNAL('valueChanged(int)'), self.changeValue)
  40. 这行语句将滑块的 valueChanged()信号与自定义的 changeValue()方法相连接。
  41. pos = self.slider.value()语句用来获取当前的滑块位置。
  42. '''
复制代码
截图:
a.png

b.png

c.png

d.png



slide-label.zip (3.8 KB, 下载次数: 6)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-17 10:55:12 | 显示全部楼层
支持下。。python还没正式学,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-17 20:19:48 | 显示全部楼层
现在还看不懂,等我学完小甲鱼的视频教程先
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

PyQt\每日一练0712 进度条

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

QProgressBar 进度条
当我们在处理一个耗时较长的任务时, 可能就会用到进度条部件。 因为使用进度条可以
形象告诉用户当前的任务正在进行中。 PyQt4 工具包提供了水平和垂直两种类型的进度条部
件。我们可以设置进度条的最大和最小值,默认的最大和最小值分别为 0 和 99。
代码:
  1. #!/usr/bin/python
  2. # progressbar.py
  3. import sys
  4. from PyQt5 import QtGui, QtCore,QtWidgets
  5. class ProgressBar(QtWidgets.QWidget):
  6. def __init__(self, parent = None):
  7. QtWidgets.QWidget.__init__(self)
  8. self.setGeometry(300, 300, 250, 150)
  9. self.setWindowTitle('ProgressBar')
  10. self.pbar = QtWidgets.QProgressBar(self)
  11. self.pbar.setGeometry(30, 40, 200, 25)
  12. self.button = QtWidgets.QPushButton('Start', self)
  13. self.button.setFocusPolicy(QtCore.Qt.NoFocus)
  14. self.button.move(40, 80)
  15. self.button.clicked.connect(self.onStart)
  16. self.timer = QtCore.QBasicTimer()
  17. self.step = 0
  18. def timerEvent(self, event):
  19. if self.step >= 100:
  20. self.timer.stop()
  21. return
  22. self.step = self.step +1
  23. self.pbar.setValue(self.step)
  24. def onStart(self):
  25. if self.timer.isActive():
  26. self.timer.stop()
  27. self.button.setText('Start')
  28. else:
  29. self.timer.start(100, self)
  30. self.button.setText('Stop')

  31. app = QtWidgets.QApplication(sys.argv)
  32. icon = ProgressBar()
  33. icon.show()
  34. sys.exit(app.exec_())

  35. '''在这个示例中,我们创建了一个水平的进度条和一个按钮。按钮用来启动或终止进度。
  36. self.pbar = QtGui.QProgressBar(self)
  37. 使用该构造器来创建一个进度条。
  38. self.timer = QtCore.QBasicTimer()
  39. 创建一个定时器对象。
  40. self.timer.start(100, self)
  41. 要激活该进度条,我们需要使用定时器的 start()方法启动定时器。该方法的第一个参数
  42. 为超时时间。第二个参数表示当前超时时间到了以后定时器触发超时事件的接收对象。
  43. def timerEvent(self, event):
  44. if self.step >= 100:
  45. self.timer.stop()
  46. return
  47. self.step = self.step +1
  48. self.pbar.setValue(self.step)
  49. 每一个 QObject 对象或其子对象都有一个 QObject.timerEvent 方法。在本实例中,为了
  50. 响应定时器的超时事件,我们需要使用上面的代码重写进度条的 timerEvent 方法。'''
复制代码



截图:
1.png


2.png


3.png

评分

参与人数 2荣誉 +15 鱼币 +10 贡献 +5 收起 理由
拈花小仙 + 5 感谢楼主无私奉献!
小甲鱼 + 10 + 10 + 5 热爱鱼C^_^

查看全部评分

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

使用道具 举报

发表于 2014-7-18 15:40:59 | 显示全部楼层
介介可以建立一个“PyPQ每日一练”的专辑哦,这样更方便建立资源索引~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-18 23:47:02 | 显示全部楼层
嘿嘿  不错哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-21 08:04:23 | 显示全部楼层
继续加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-21 14:01:01 | 显示全部楼层

PyQt\每日一练0713 日历

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

QCalendarWidget 日历部件
QCalendarWidget 类提供了以月为单位的日历部件。该部件允许用户以一种简单而直接
的方式选择日期。
代码:
  1. #!/usr/bin/python
  2. # calendar.py
  3. import sys
  4. from PyQt5 import QtGui, QtCore,QtWidgets
  5. class Calendar(QtWidgets.QWidget):
  6. def __init__(self, parent = None):
  7. QtWidgets.QWidget.__init__(self)
  8. self.setGeometry(300, 300, 350, 300)
  9. self.setWindowTitle('Calendar')
  10. self.cal = QtWidgets.QCalendarWidget(self)
  11. self.cal.setGridVisible(True)
  12. self.cal.selectionChanged.connect(self.showDate)
  13. self.label = QtWidgets.QLabel(self)
  14. date = self.cal.selectedDate()
  15. self.label.setText(str(date.toPyDate()))
  16. vbox = QtWidgets.QVBoxLayout()
  17. vbox.addWidget(self.cal)
  18. vbox.addWidget(self.label)
  19. self.setLayout(vbox)
  20. def showDate(self):
  21. date = self.cal.selectedDate()
  22. self.label.setText(str(date.toPyDate()))

  23. app = QtWidgets.QApplication(sys.argv)
  24. w = Calendar()
  25. w.show()
  26. sys.exit(app.exec_())
  27. '''
  28. 该示例窗口拥有一个日历部件和一个标签部件。当前被选中的日期被显示在标签部件
  29. 中。
  30. 使用 self.cal = QtGui.QCalendarWidget(self)语句创建一个日历对象。
  31. self.connect(self.cal, QtCore.SIGNAL('selectionChanged()'), self.showDate)语句将日历对
  32. 象的 selectionChanged()信号和自定义的 showDate()方法相连接。这样在我们选定一个日期
  33. 后, 日历对象的 selectionChanged()消息就会被触发, 而与之相连的 showDate()方法就会被调
  34. 用。
  35. def showDate(self):
  36. date = self.cal.selectedDate()
  37. self.label.setText(str(date.toPyDate()))
  38. 在 showDate 方法中,我们使用 selectedDate 方法获取被选择的日期。然后将其转换为
  39. 字符串并显示在标签部件中。
  40. '''
复制代码


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

使用道具 举报

发表于 2014-7-21 14:48:44 | 显示全部楼层
~风介~ 发表于 2014-7-21 07:28
嗯。。。。等会看看怎么建立吧~
停水停电快三天了。。。。终于好啦

哥们这是在阿富汗吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-21 17:16:59 | 显示全部楼层
学习中............
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 14:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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