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")

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM