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

主要内容


  • 通过继承实现自己的界面类;
  • 涉及模块: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)<br>    
        #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 = <b>%s</b>" % (text, eval(text)))
        except:
            self.browser.append(
                    "<font color=red>%s is invalid!</font>" % 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")

 

 

 

 

posted @ 2012-09-27 19:20  Keosu  阅读(8245)  评论(0编辑  收藏  举报