热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PyQT入门(2):实现自己的界面类

主要内容通过继承实现自己的界面类;涉及模块:QDialog,QLineEdit,QTextBrowser界面布局:绝对布局,布局类实例讲解先看一段代码,我们定义了一

主要内容


  • 通过继承实现自己的界面类;
  • 涉及模块:QDialog, QLineEdit , QTextBrowser
  • 界面布局:绝对布局,布局类

 

实例讲解


先看一段代码,我们定义了一个类Form,它继承自QDialog

class Form(QDialog):

def __init__(self, parent=None):
super(Form, self).__init__(parent)
self.browser = QTextBrowser()
self.lineedit = QLineEdit("Type an expression and press Enter")
self.lineedit.selectAll()
layout = QVBoxLayout() #垂直盒式布局
layout.addWidget(self.browser)
layout.addWidget(self.lineedit)
  
#layout = QGridLayout() #网格布局
#layout.addWidget(self.browser,0, 0)
#layout.addWidget(self.lineedit,0, 0)
self.setLayout(layout)
self.lineedit.setFocus()
self.connect(self.lineedit, SIGNAL("returnPressed()"), self.updateUi) #信号绑定到槽
self.setWindowTitle("Calculate")

def updateUi(self):
try:
text = unicode(self.lineedit.text())
self.browser.append("%s = %s" % (text, eval(text)))
except:
self.browser.append(
"%s is invalid!" % text)

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

(1) QDialog是窗口类, QLineEdit文本框,QTextBrowser显示内容的文本区域,支持html格式语法。

(2)layout = QVBoxLayout() 垂直盒式布局,即内容对象上下排列

  说到布局,主要分为两类:绝对布局,相对布局(相应类)

  • 绝对布局,调用move(x,y)方法
  • 相对布局,常用的有 QHBoxLayout, QVBoxLayout  和QGridLayout (网格布局)

(3)特别注意的是 self.connect(self.lineedit, SIGNAL("returnPressed()"), self.updateUi)

这是PyQt的事件处理机制 ---- 信号与槽(Signals and slots):

信号相当于一个事件:如点击按钮,完成输入后按回车等等;槽相当于处理函数。

在上面程序中,当在文本框中完成输入按回车时,就会调用updateUi函数,这就是connect绑定的效果。

程序效果如下:

 

简要总结:


  •  通过继承实现窗体类
  •  窗口布局方法
  •  QDialog, QLineEdit , QTextBrowser
  •  QLineEdit 方法:
    • 获取unicode 文本: unicode(lineEdit.text())  
  •  QTextBrowser 方法:
    • 添加内容 textBrowser.appen("formatText")
  •  信号与槽
    • self.connect(widget, signal , slot)

 

扩展知识:


熟悉常用的窗口组件:

1 按钮类

 

QPushButton  

普通按钮

QToolButton  

工具按钮:通常在工具栏使用

QRadioButton  

单选框

QCheckBox  

复选框

QCommanLinkButton

Vista风格的命令链接按钮

QDialogButtonBox  

对话框按钮组:确定、取消

 

2 显示组件

 

QLabel

标签

QTextBrowser

文本区域

QGraphicsView

图像显示

QCalendarWidget

日历组件

QProgressBar

进度条

QLCDNumber

液晶数字显示

QWebView

Web浏览器视图

QDeclarativeView

显示Qt声明的用户接口

 

3 输入组件

QComboBox

下拉选框

QFontComboBox

字体选择

QLineEdit

单行文本框

QTextEdit

多行文本框(富文本)

QPlainTextEdit

多行文本框(纯文本)

QSpinBox

整数范围调节器

QDoubleSpinBox

实型范围调节器

QDial

环形范围调节器

QSlider

滑动调节器

QTimeEdit

时间输入框

QDateEdit

日期输入框

QDateTimeEdit

时间日期输入框

 

4 容器类

QFrame

帧窗口

QWidget

界面部件,所有界面对象类的基类

QToolBox

工具栏容器

QTabWidget

多标签容器

QStackedWidget

层次容器,一次只有一个可见

QScollArea

滚动区域

QGroupBox

对象组容器

QMdiArea

多文档容器

QDockWidget

悬浮容器

 
 

QDail, QSpinBox的使用

QDial:环形的范围选择器

QSpinBox :下拉列表形式的整数选择器

class Form(QDialog):

def __init__(self, parent=None):
super(Form, self).__init__(parent)

dial = QDial()
dial.setNotchesVisible(True)
spinbox = QSpinBox()
layout = QHBoxLayout()
layout.addWidget(dial)
layout.addWidget(spinbox)
self.setLayout(layout)

self.connect(dial, SIGNAL("valueChanged(int)"),spinbox.setValue)
self.connect(spinbox, SIGNAL("valueChanged(int)"),dial.setValue)
self.setWindowTitle("Signals and Slots")

 

 

 

 


推荐阅读
author-avatar
俺是糊涂人一个
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有