午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

PyQt5基礎(chǔ)知識(shí) 超詳細(xì)?。。。êa)

 cslwp 2022-04-07
在嗶哩嗶哩中看的教程整理的筆記:視頻鏈接https://www.bilibili.com/video/BV1VE411t7kC?p=1

目錄

一.水平布局

二.垂直布局

三.Grid 柵格布局

四. form表單布局

五.組合垂直和水平布局

六.絕對(duì)布局

七.分割線與間隙

八.控件尺寸的最大值與最小值

九.尺寸策略(sizePolicy)

十.伙伴關(guān)系

十一.Tab順序

十二.信號(hào)和槽

十三 . 添加菜單欄與工具欄

十四.使用python代碼編寫

十五.讓主窗口居中顯示

十六.點(diǎn)擊按鈕退出應(yīng)用程序

十七.屏幕坐標(biāo)系

十八.設(shè)置窗口和應(yīng)用程序圖標(biāo)

十九.為控件添加提示消息

二十.QLabel控件的基本用法

二十一. QLabel與伙伴控件

二十二.限制QLineEdit控件的輸入

二十三.QLineEdit綜合案例

二十四.QTextEdit控制輸入多行文本

二十五. 按鈕控件

二十六.使用QDialog顯示通用對(duì)話框

二十七.顯示不同類型的消息對(duì)話框

二十八.顯示不同類型的消息對(duì)話框

二十九.文件對(duì)話框

三十.選項(xiàng)卡控件

三十一.堆棧窗口控件

三十二.??靠丶?/p>

三十三.容納多文檔的窗口

一.水平布局

兩種方法:

 1.選中控件——》右鍵布局——》水平布局

 2.layout的horizontal ——》將部件拖進(jìn)去

設(shè)計(jì)的ui程序只是設(shè)計(jì)的,要真正在程序中調(diào)用要轉(zhuǎn)換成.py文件

方法三:在pycharm中設(shè)置(拓展工具中設(shè)置PyUIC,具體設(shè)置方法自行查找)

二.垂直布局

三.Grid 柵格布局

N行m列

四. form表單布局

N行兩列

左側(cè)一般是標(biāo)簽,右邊一般是采集用戶輸入的

五.組合垂直和水平布局

圖中備注為label形式

下面的文本框?yàn)閘ine Edit形式

Ctrl+方向鍵 微調(diào)

六.絕對(duì)布局

七.分割線與間隙

屬性在goemotry中查看

    spacer 添加加空隙

水平的話,先調(diào)整為水平布局,將Horizontal spacer拖入水平布局內(nèi)——》選中間隙,——》spacer中選中sizeType中的Fixed ——》可以設(shè)置寬度,垂直的可以設(shè)置高度

   2. 添加間隔線

在Displace Widgets中的 Vertiacl Line與Horizontal Line

八.控件尺寸的最大值與最小值

minimumsize最小

maximumsize 最大  設(shè)置一個(gè)控件最大最小的尺寸

九.尺寸策略(sizePolicy)

SizeHint(期望尺寸)

默認(rèn)尺寸,對(duì)于大多數(shù)控件來說,SizeHint不可修改,只讀。

讀取SizeHint的方法如圖:

舉例:設(shè)置如下界面

首先選擇一個(gè)水平布局——》然后在水平布局左側(cè)添加一個(gè)Tree View(Item Views中) ,右側(cè)加一個(gè)frame面板(Containers中),——>然后設(shè)置為1:1:2的水平比例,——》然后在右側(cè)加入表單布局,form layout,再往form layout中拖動(dòng)label與line text

十.伙伴關(guān)系

兩個(gè)控件的關(guān)聯(lián)關(guān)系

菜單顯示時(shí)按熱鍵才起作用,相當(dāng)于另外一種快捷鍵。

效果:

當(dāng)鍵盤輸入ait+a 時(shí)光標(biāo)顯示在姓名后的文本框,不區(qū)分大小寫

alt+b光標(biāo)定位在身份證后

代碼也可以實(shí)現(xiàn)兩個(gè)控件的伙伴關(guān)系(以后講)

十一.Tab順序

按Tab鍵之后,光標(biāo)在輸入框中的跳轉(zhuǎn)順序

方法一:右鍵

方法二:直接點(diǎn)框內(nèi)數(shù)字

十二.信號(hào)和槽

    信號(hào)(signal)與槽(slot)是qt的核心機(jī)制,也是Pyqt的核心機(jī)制。

    信號(hào):是由對(duì)象或控件發(fā)射出去的消息

    按鈕的單擊事件:當(dāng)單擊按鈕時(shí),按鈕就會(huì)向外部發(fā)送單擊的消息,這些發(fā)送出去的信號(hào)需要一些代碼來攔截,這些代碼就槽。

    槽:本質(zhì)上是一個(gè)函數(shù)或方法,信號(hào)可以理解為事件函數(shù)

    需要將信號(hào)與槽綁定,一個(gè)信號(hào)可以和多個(gè)槽綁定,一個(gè)槽可以攔截多個(gè)信號(hào)

例1:功能:實(shí)現(xiàn)點(diǎn)擊按鈕,關(guān)閉窗口

(1)先創(chuàng)建一個(gè)按鈕,再設(shè)置信號(hào)/槽

注:

可恢復(fù)窗口,即重新編輯(刪除控件等操作)

例2:功能:實(shí)現(xiàn)輸入框的顯示與隱藏,以及文本輸入框的可用與不可用

效果如下圖:

1.首先設(shè)置隱藏于顯示這兩個(gè)控件

(1)設(shè)計(jì)出界面:復(fù)選框和文本輸入框

(2)修改復(fù)選框默認(rèn)為選中狀態(tài)

,即默認(rèn)為

(3)設(shè)計(jì)信號(hào)/槽關(guān)系

2.設(shè)置這兩個(gè)控件

(1)設(shè)計(jì)出界面:復(fù)選框和文本輸入框

(2)將文本框默認(rèn)設(shè)置為不可用

,即文本輸入框顯示為灰色

(3)設(shè)計(jì)信號(hào)/槽關(guān)系

最終效果如下:

單擊(clicked)事件與close方法想關(guān)聯(lián)。

十三 . 添加菜單欄與工具欄

如何創(chuàng)建菜單欄與工具欄,并且往菜單欄和工具欄添加菜單和按鈕

1.狀態(tài)欄

主窗口最下面的狀態(tài)欄,默認(rèn)是有的

2.菜單欄

點(diǎn)擊菜單欄——》右鍵移除

3,工具欄

(1)添加工具欄——》右鍵

(2)打開動(dòng)作編輯器,選中要放入工具欄的動(dòng)作,從動(dòng)作編輯器中拖至工具欄。

效果

十四.使用python代碼編寫

主窗口的類型:有三種窗口

    QMainWindow:可以包含菜單欄、工具欄和標(biāo)題欄,是最常見的窗口形式

    QDialog:是對(duì)話窗口的基類。沒有菜單欄、工具欄和標(biāo)題欄

    QWidget:不確定窗口的用途,就使用QWidget。

    我們一般會(huì)使用QMainWindow,在QMainWindow里面使用QDialog,偶爾使用QWidget。

效果:

代碼:

    '''

    面向?qū)ο蟮姆绞剑瑢⑺信cui有關(guān)的代碼都放進(jìn)一個(gè)類里面,

    然后創(chuàng)建一個(gè)窗口,只要?jiǎng)?chuàng)建這個(gè)類的子類即可

    '''

    import sys

    from PyQt5.QtWidgets import QApplication , QMainWindow

    from PyQt5.QtGui import QIcon

    class FirstMainWin(QMainWindow):

        def __init__(self,parent=None):

            super(FirstMainWin,self).__init__(parent)

            #設(shè)置主窗口的標(biāo)題

            self.setWindowTitle("第一個(gè)主窗口應(yīng)用")

            #設(shè)置窗口的尺寸

            self.resize(400,300)

            self.status = self.statusBar()

            self.status.showMessage('只存在5秒的消息',5000)

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        #app.setWindowIcon(QIcon('E:/PycharmProjects/doutula/pyqt5_/controls/images/t10.ico'))

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = FirstMainWin()

        main.show()

        sys.exit(app.exec_())

十五.讓主窗口居中顯示

窗口默認(rèn)也為居中,因此我認(rèn)為此節(jié)不是很重,但是還是記錄一下方法。

    #得這整個(gè)屏幕的尺寸,和整個(gè)窗口的尺寸,然后用整個(gè)屏幕的尺寸減去整個(gè)窗口的尺寸

    import sys

    from PyQt5.QtWidgets import QApplication, QMainWindow,QDesktopWidget

    from PyQt5.QtGui import QIcon

    class CenterForm(QMainWindow):

        def __init__(self, parent=None):

            super(CenterForm, self).__init__(parent)

            # 設(shè)置主窗口的標(biāo)題

            self.setWindowTitle("讓窗口居中")

            # 設(shè)置窗口的尺寸

            self.resize(400, 300)

            print("初始化")

        def center(self):

            #獲取屏幕坐標(biāo)系

            screen = QDesktopWidget().screenGeometry()

            #獲取窗口坐標(biāo)系

            size = self.geometry()

            newLeft = (screen.width()-size.width())/2

            newTop = (screen.height() - size.height()) / 2

            #調(diào)用move的方法來移動(dòng)窗口

            self.move(newLeft,newTop)

            print("移動(dòng)窗口")

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        c = CenterForm()

        #main = CenterForm.center(c)  #不調(diào)用此函數(shù),窗口依然可以居中

        main.show()

        sys.exit(app.exec_())

十六.點(diǎn)擊按鈕退出應(yīng)用程序

    import sys

    from PyQt5.QtWidgets import QPushButton,QHBoxLayout,QWidget,QApplication, QMainWindow,QDesktopWidget

    from PyQt5.QtGui import QIcon

    class QuitApplication(QMainWindow):

        #點(diǎn)擊按鈕,退出應(yīng)用程序

        def __init__(self):

            super(QuitApplication, self).__init__()

            self.resize(300,120)

            self.setWindowTitle("退出應(yīng)用程序")

            #添加Button

            self.button1 = QPushButton("退出程序")

            #將button與槽綁定

            self.button1.clicked.connect(self.onClick_Button)

            #創(chuàng)建水平布局

            layout = QHBoxLayout()

            layout.addWidget(self.button1)  #把button1放在水平布局是哪個(gè)

            #把水平布局放在主框架上

            mainFrame = QWidget()  #讓充滿屏幕

            mainFrame.setLayout(layout)

            self.setCentralWidget(mainFrame) #讓主框架放在整個(gè)窗口上

        #按鈕單擊事件的方法(自定義的槽)

        def onClick_Button(self):

            sender = self.sender()  #通過sender獲得button

            print(sender.text()+ "  按鈕被按下")  #sender.text()是讀取按鈕上的內(nèi)容

            app = QApplication.instance()  #得到一個(gè)實(shí)例

            #退出應(yīng)用程序

            app.quit()

    if  __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = QuitApplication()

        main.show()

        sys.exit(app.exec_())

點(diǎn)擊按鈕后,窗口關(guān)閉,并且命令行顯示

十七.屏幕坐標(biāo)系

    屏幕左上角坐標(biāo)是(0,0)

    工作區(qū)高度:窗口高度(不包括標(biāo)簽欄)

    標(biāo)簽欄高度:標(biāo)簽欄坐標(biāo)減去工作區(qū)坐標(biāo)

    widget.resize(300,240) 設(shè)置的是工作區(qū)的尺寸

 注意區(qū)分三者坐標(biāo)的不同,詳解見代碼注釋。

    import sys

    from PyQt5.QtWidgets import QPushButton,QHBoxLayout,QWidget,QApplication, QMainWindow,QDesktopWidget

    from PyQt5.QtGui import QIcon

    #此例子中使用面向過程的方式,不使用類了

    def onClick_Button():

        print("含邊框的坐標(biāo)")

        print("widget.x()= %d" % widget.x())        #含有邊框的坐標(biāo)    250(窗口橫坐標(biāo))

        print("widget.y()= %d" % widget.y())        #200(窗口縱坐標(biāo))

        print("widget.width()= %d" % widget.width()) #300(工作區(qū)寬度)

        print("widget.height() = %d" % widget.height())#240(工作區(qū)高度)

        print("工作區(qū)的坐標(biāo)")

        print("widget.geometry().x()= %d" % widget.geometry().x()) #工作區(qū)的坐標(biāo)系,不包含標(biāo)題欄 251(工作區(qū)橫坐標(biāo))

        print("widget.geometry().y()= %d" % widget.geometry().y())          #231(工作區(qū)縱坐標(biāo))

        print("widget.geometry().width()= %d" % widget.geometry().width())  #300(工作區(qū)寬度)

        print("widget.geometry().height() = %d" % widget.geometry().height())#240(工作區(qū)高度)

        print("框架的坐標(biāo)")

        print("widget.frameGeometry().x()= %d" % widget.frameGeometry().x())    #250(窗口橫坐標(biāo))

        print("widget.frameGeometry().y()= %d" % widget.frameGeometry().y())    #200(窗口縱坐標(biāo))

        print("widget.frameGeometry().width()= %d" % widget.frameGeometry().width()) #302(窗口寬度)

        print("widget.frameGeometry().height() = %d" % widget.frameGeometry().height()) #272(窗口高度 =標(biāo)題欄高度+工作區(qū)高度)

    app = QApplication(sys.argv)

    widget = QWidget()

    btn = QPushButton(widget)

    btn.setText("按鈕")

    btn.clicked.connect(onClick_Button)

    btn.move(24,52)

    widget.resize(300,240)  #設(shè)置工作區(qū)的尺寸

    widget.move(250,200)

    widget.setWindowTitle("屏幕坐標(biāo)系")

    widget.show()

    sys.exit(app.exec_())

點(diǎn)擊按鈕后輸出:

十八.設(shè)置窗口和應(yīng)用程序圖標(biāo)

        窗口的setWindowIcon方法用于設(shè)置主窗口的圖標(biāo)和應(yīng)用程序圖標(biāo),只在Windows可用

        QApplication中的setWindowIcon方法也用于設(shè)置主窗口的圖標(biāo)和應(yīng)用程序圖標(biāo),

        但調(diào)用了窗口的setWindowIcon方法,QApplication中的setWindowIcon方法就不起作用了

        (與老師講的有些出入,但是還是以運(yùn)行結(jié)果為準(zhǔn))

    import sys

    from PyQt5.QtWidgets import QApplication, QMainWindow

    from PyQt5.QtGui import QIcon

    '''

    窗口的setWindowIcon方法用于設(shè)置主窗口的圖標(biāo)和應(yīng)用程序圖標(biāo),只在Windows可用

    QApplication中的setWindowIcon方法也用于設(shè)置主窗口的圖標(biāo)和應(yīng)用程序圖標(biāo),

    但調(diào)用了窗口的setWindowIcon方法,QApplication中的setWindowIcon方法就不起作用了

    '''

    class IconForm(QMainWindow):

        def __init__(self):

            super(IconForm, self).__init__()

            self.initUI()

        def initUI(self):

            self.setGeometry(300,300,250,250)

            # 設(shè)置主窗口的標(biāo)題

            self.setWindowTitle("設(shè)置窗口圖標(biāo)")

            #設(shè)置窗口圖標(biāo)

            self.setWindowIcon(QIcon('./images/t10.ico'))

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('E:/PycharmProjects/doutula/pyqt5_/controls/images/t12.ico'))

        main = IconForm()

        main.show()

        sys.exit(app.exec_())

 運(yùn)行結(jié)果:

十九.為控件添加提示消息

鼠標(biāo)放在工作區(qū)就會(huì)出現(xiàn)提醒信息

    #為控件添加提示信息

    import sys

    from PyQt5.QtWidgets import QHBoxLayout,QWidget,QToolTip,QPushButton,QApplication, QMainWindow

    from PyQt5.QtGui import QIcon

    from PyQt5.QtGui import QFont

    class TooltipForm(QMainWindow):

        def __init__(self):

            super().__init__()

            self.initUI()

        def initUI(self):

            QToolTip.setFont(QFont("SanSerif",12))#設(shè)置字體與大小

            self.setToolTip("今天是<b>星期五</b>") #設(shè)置提示信息為粗體

            self.setGeometry(300,300,400,300)

            self.setWindowTitle("設(shè)置控件提示消息")

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = TooltipForm()

        main.show()

        sys.exit(app.exec_())

效果: 

    #為控件添加提示信息

    import sys

    from PyQt5.QtWidgets import QHBoxLayout,QWidget,QToolTip,QPushButton,QApplication, QMainWindow

    from PyQt5.QtGui import QIcon

    from PyQt5.QtGui import QFont

    class TooltipForm(QMainWindow):

        def __init__(self):

            super().__init__()

            self.initUI()

        def initUI(self):

            QToolTip.setFont(QFont("SanSerif",12))#設(shè)置字體與大小

            self.setToolTip("今天是<b>星期五</b>") #設(shè)置提示信息為粗體

            self.setGeometry(300,300,400,300)

            self.setWindowTitle("設(shè)置控件提示消息")

            # 添加Button

            self.button1 = QPushButton("我的按鈕")

            self.button1.setToolTip("這是一個(gè)按鈕")

            # 創(chuàng)建水平布局

            layout = QHBoxLayout()

            layout.addWidget(self.button1)  # 把button1放在水平布局是哪個(gè)

            # 把水平布局放在主框架上

            mainFrame = QWidget()  # 讓充滿屏幕

            mainFrame.setLayout(layout)

            self.setCentralWidget(mainFrame)  # 讓主框架放在整個(gè)窗口上

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = TooltipForm()

        main.show()

        sys.exit(app.exec_())

效果: 

二十.QLabel控件的基本用法

    setAlignment():設(shè)置文本的對(duì)齊方式

    setIndent(): 設(shè)置文本縮進(jìn)

    text(): 獲取文本內(nèi)容

    setBuddy(): 設(shè)置伙伴關(guān)系

    setText():設(shè)置文本內(nèi)容

    selectText():返回所選擇的字符

    setWordWrap():設(shè)置是否允許換行

    '''

    setAlignment():設(shè)置文本的對(duì)齊方式

    setIndent(): 設(shè)置文本縮進(jìn)

    text(): 獲取文本內(nèi)容

    setBuddy(): 設(shè)置伙伴關(guān)系

    setText():設(shè)置文本內(nèi)容

    selectText():返回所選擇的字符

    setWordWrap():設(shè)置是否允許換行

    QLabel常用的信號(hào)(事件):

    1.當(dāng)鼠標(biāo)滑過QLabel控件時(shí)觸發(fā):linkHovered

    2.當(dāng)鼠標(biāo)單擊QLabel控件時(shí)觸發(fā):linkActivated

    '''

    import sys

    from PyQt5.QtWidgets import QLabel,QVBoxLayout,QWidget,QToolTip,QPushButton,QApplication, QMainWindow

    from PyQt5.QtGui import QIcon

    from PyQt5.QtGui import QPalette,QPixmap

    from PyQt5.QtCore import Qt

    class QLabelDemo(QWidget):

        def __init__(self):

            super().__init__()

            self.initUI()

        def initUI(self):

            #創(chuàng)建label

            label1 = QLabel(self)

            label2 = QLabel(self)

            label3 = QLabel(self)

            label4 = QLabel(self)

            label1.setText("<font color = yellow>這是一個(gè)文本標(biāo)簽(label1).</font>")

            label1.setAutoFillBackground(True)  #背景自動(dòng)填充

            palette = QPalette()  #填充

            palette.setColor(QPalette.Window,Qt.blue) #設(shè)置label背景顏色

            label1.setPalette(palette) #調(diào)試板

            label1.setAlignment(Qt.AlignCenter)  #設(shè)置文字的對(duì)齊方式,文本居中對(duì)齊

            label2.setText("<a href= '#'>歡迎使用Python (label2)</a>")

            label3.setAlignment(Qt.AlignCenter)

            label3.setToolTip("這是一個(gè)圖片標(biāo)簽(label2)")

            label3.setPixmap(QPixmap("./images/4.jpg"))

            #label4,要么觸發(fā)單擊事件,要么鏈接,只能二者選其一

            #如果設(shè)為True用瀏覽器打開網(wǎng)頁,如果設(shè)為False,調(diào)用槽函數(shù)

            label4.setOpenExternalLinks(True)

            label4.setText("<a href= 'https://www.baidu.com/'> 感謝使用百度(label4) </a>")

            label4.setAlignment(Qt.AlignRight)

            label4.setToolTip("這是一個(gè)超級(jí)鏈接")

            #垂直布局

            vbox = QVBoxLayout()

            vbox.addWidget(label1)

            vbox.addWidget(label2)

            vbox.addWidget(label3)

            vbox.addWidget(label4)

            #將linkHovered信號(hào)綁定到self.linkHovered槽函數(shù)上

            label2.linkHovered.connect(self.linkHovered)  #滑過事件

            label4.linkActivated.connect(self.linkClicked) #單擊事件

            self.setLayout(vbox)  #設(shè)置布局

            self.setWindowTitle("QLabel控件演示")

        def linkHovered(self):

            print("當(dāng)鼠標(biāo)滑過label2標(biāo)簽時(shí),觸發(fā)條件")

        def linkClicked(self):

            print("當(dāng)鼠標(biāo)滑過label4標(biāo)簽時(shí),觸發(fā)條件")

    if  __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = QLabelDemo()

        main.show()

        sys.exit(app.exec_())

效果: 

二十一. QLabel與伙伴控件

熱鍵:ALT+()

        mainLayout.addWidget(控件名,控件位置行索引,控件位置行索引,控件占幾行,控件占幾列)

        #柵格布局

        mainLayout = QGridLayout(self)

        mainLayout.addWidget(nameLabel,0,0)  #(0,0)表示放在一行一列

        mainLayout.addWidget(nameLineEdit,0,1,1,2)#(0,1,1,2)表示放在第一行的第二列,占1行兩列

        mainLayout.addWidget(passwordLabel,1,0) #(1,0)表示第二行第一列

        mainLayout.addWidget(passwordLineEdit,1,1,1,2)  #(1,1,1,2)表示在第二行的第二列,占一行兩列

    '''

    QLabel與伙伴控件

    mainLayout.addWidget(控件名,控件位置行索引,控件位置行索引,控件占幾行,控件占幾列)

    '''

    from PyQt5.QtWidgets import *

    import sys

    from PyQt5.QtGui import QIcon

    class QLabelBuddy(QDialog) :

        def __init__(self):

            super().__init__()

            self.initUI()

        def initUI(self):

            self.setWindowTitle("QLabel與伙伴控件")

            #創(chuàng)建兩個(gè)控件

            nameLabel = QLabel('&Name',self)

            nameLineEdit = QLineEdit(self)

            #設(shè)置伙伴控件

            nameLabel.setBuddy(nameLineEdit)

            #輸入密碼

            passwordLabel = QLabel('&Password', self)

            passwordLineEdit = QLineEdit(self)

            # 設(shè)置伙伴控件

            passwordLabel.setBuddy(passwordLineEdit)

            #創(chuàng)建按鈕

            btnOK = QPushButton("&OK")

            btnCancel = QPushButton("&Cancel")

            #柵格布局

            mainLayout = QGridLayout(self)

            mainLayout.addWidget(nameLabel,0,0)  #(0,0)表示放在一行一列

            mainLayout.addWidget(nameLineEdit,0,1,1,2)#(0,1,1,2)表示放在第一行的第二列,占1行兩列

            mainLayout.addWidget(passwordLabel,1,0) #(1,0)表示第二行第一列

            mainLayout.addWidget(passwordLineEdit,1,1,1,2)  #(1,1,1,2)表示在第二行的第二列,占一行兩列

            mainLayout.addWidget(btnOK,2,1)

            mainLayout.addWidget(btnCancel,2,2)

    if  __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = QLabelBuddy()

        main.show()

        sys.exit(app.exec_())

    #ALT+N,ALT+P

效果:alt+p,alt+n上下跳轉(zhuǎn) 

二十二.限制QLineEdit控件的輸入

    限制QLineEdit控件的輸入(校驗(yàn)器)

    如限制只能輸入整數(shù),浮點(diǎn)數(shù)或滿足一定條件的字符串

    '''

    限制QLineEdit控件的輸入(校驗(yàn)器)

    如現(xiàn)在只能輸入整數(shù),浮點(diǎn)數(shù)或滿足一定條件的字符串

    '''

    from PyQt5.QtGui import QIcon

    from PyQt5.QtWidgets import *

    from PyQt5.QtGui import QIntValidator,QDoubleValidator,QRegExpValidator

    from PyQt5.QtCore import QRegExp

    import  sys

    class QLineEditValidator(QWidget):

        def __init__(self):

            super(QLineEditValidator,self).__init__()

            self.setWindowTitle("校驗(yàn)器")

            self.initUI()

        def initUI(self):

            #創(chuàng)建表單布局

            formLayout = QFormLayout()

            intLineEdit = QLineEdit()

            doubleLineEdit = QLineEdit()

            validatorLineEdit = QLineEdit()

            formLayout.addRow("整數(shù)類型",intLineEdit)

            formLayout.addRow("浮點(diǎn)類型",doubleLineEdit)

            formLayout.addRow("數(shù)字和字母",validatorLineEdit)

            intLineEdit.setPlaceholderText("整型")

            doubleLineEdit.setPlaceholderText("浮點(diǎn)型")

            validatorLineEdit.setPlaceholderText("數(shù)字和字母")

            #整型校驗(yàn)器[1,99]

            intValidator = QIntValidator(self)

            intValidator.setRange(1,99)

            #浮點(diǎn)校驗(yàn)器[-360,360],精度:小數(shù)點(diǎn)后兩位

            doubleValidator = QDoubleValidator(self)

            doubleValidator.setRange(-360,360)

            doubleValidator.setNotation(QDoubleValidator.StandardNotation)

            #設(shè)置精度,小數(shù)點(diǎn)2位

            doubleValidator.setDecimals(2)

            #字符和數(shù)字 ,正則

            reg = QRegExp('[a-zA-Z0-9]+$')

            validator = QRegExpValidator(self)

            validator.setRegExp(reg)

            #設(shè)置校驗(yàn)器

            intLineEdit.setValidator(intValidator)

            doubleLineEdit.setValidator(doubleValidator)

            validatorLineEdit.setValidator(validator)

            self.setLayout(formLayout)

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = QLineEditValidator()

        main.show()

        sys.exit(app.exec_())

二十三.QLineEdit綜合案例

    '''

    QLineEdit綜合案例

    '''

    from PyQt5.QtGui import QIcon

    from PyQt5.QtWidgets import *

    from PyQt5.QtGui import *

    from PyQt5.QtCore import Qt

    import sys

    class QLineEditDemo(QWidget):

        def __init__(self):

            super(QLineEditDemo, self).__init__()

            self.initUI()

        def initUI(self):

            edit1 = QLineEdit()

            #使用int校驗(yàn)器

            edit1.setValidator(QIntValidator())

            edit1.setMaxLength(4) #不超過9999

            edit1.setAlignment(Qt.AlignCenter)

            edit1.setFont(QFont("Arial",20))

            #浮點(diǎn)數(shù)的校驗(yàn)器

            edit2 = QLineEdit()

            edit2.setValidator(QDoubleValidator(0.99,99.99,2))

            #掩碼

            edit3 = QLineEdit()

            edit3.setInputMask('99_9999_999999;#')

            #綁定信號(hào)和槽(文本變化時(shí),觸發(fā)事件)

            edit4 = QLineEdit()

            edit4.textChanged.connect(self.textChanged)

            edit5 = QLineEdit()

            edit5.setEchoMode(QLineEdit.Password)

            edit5.editingFinished.connect(self.enterPress)

            #設(shè)置為只讀

            edit6 = QLineEdit("Hello PyQt5")

            edit6.setReadOnly(True)

            formLayout = QFormLayout()

            formLayout.addRow("整數(shù)校驗(yàn)",edit1)

            formLayout.addRow("浮點(diǎn)數(shù)校驗(yàn)", edit2)

            formLayout.addRow("Input Mask", edit3)

            formLayout.addRow("文本變化", edit4)

            formLayout.addRow("密碼", edit5)

            formLayout.addRow("只讀", edit6)

            self.setLayout(formLayout)

            self.setWindowTitle("QLineEdit綜合案例")

        def textChanged(self,text):

            print('輸入的內(nèi)容:'+ text)

        def enterPress(self):

            print("已輸入值")

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = QLineEditDemo()

        main.show()

        sys.exit(app.exec_())

效果:

二十四.QTextEdit控制輸入多行文本

    '''

    QTextEdit控件

    '''

    from PyQt5.QtGui import QIcon

    from PyQt5.QtWidgets import *

    from PyQt5.QtGui import QIntValidator,QDoubleValidator,QRegExpValidator

    from PyQt5.QtCore import QRegExp

    import  sys

    class QTextEditDemo(QWidget):

        def __init__(self):

            super(QTextEditDemo,self).__init__()

            self.initUI()

        def initUI(self):

            self.setWindowTitle("QTextEdit控件演示")

            self.resize(300,320)

            self.textEdit = QTextEdit()

            self.buttonText = QPushButton("顯示文本")

            self.buttonHTML = QPushButton("顯示HTML")

            self.buttonToText = QPushButton("獲取文本")

            self.buttonToHTML = QPushButton("獲取HTML")

            layout = QVBoxLayout()

            layout.addWidget(self.textEdit)

            layout.addWidget(self.buttonText)

            layout.addWidget(self.buttonHTML)

            layout.addWidget(self.buttonToText)

            layout.addWidget(self.buttonToHTML)

            self.setLayout(layout)

            self.buttonToText.clicked.connect(self.onClick_ButtonToText)

            self.buttonToHTML.clicked.connect(self.onClick_ButtonToHTML)

            self.buttonText.clicked.connect(self.onClick_ButtonText)

            self.buttonHTML.clicked.connect(self.onClick_ButtonHTML)

        def onClick_ButtonText(self):

            self.textEdit.setPlainText("Hello World")

        def onClick_ButtonHTML(self):

            self.textEdit.setHtml('<font color= "blue" size ="5">Hello World?。?!           How are you?</font>')

        def onClick_ButtonToText(self):

            print(self.textEdit.toPlainText())

        def onClick_ButtonToHTML(self):

            print(self.textEdit.toHtml())

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = QTextEditDemo()

        main.show()

        sys.exit(app.exec_())

二十五. 按鈕控件

    ctrl+鼠標(biāo)左鍵選中——》查看該方法的源碼

    '''

    按鈕控件(QPushButton)

    QAstractButton

    QPushButton

    AToolButton

    QRadioButton

    QCheckBox

    '''

    import sys

    from PyQt5.QtGui import QIcon

    from PyQt5.QtWidgets import *

    from PyQt5.QtGui import *

    from PyQt5.QtCore import *

    class QPushButtonDemo(QDialog):#對(duì)話框

        def __init__(self):

            super(QPushButtonDemo,self).__init__()

            self.initUI()

        def initUI(self):

            self.setWindowTitle("QPushButton Demo")

            #垂直布局

            layout = QVBoxLayout()

            self.button1 = QPushButton("第一個(gè)按鈕")

            self.button1.setText("First Button1")

            self.button1.setCheckable(True)

            self.button1.toggle()#設(shè)置開關(guān),第一次選中

            #讓你傳兩個(gè)參數(shù),lambda表達(dá)式,硬編碼(直接調(diào)用whichButton方法)

            self.button1.clicked.connect(lambda:self.whichButton(self.button1))

            self.button1.clicked.connect(self.buttonState)

            layout.addWidget(self.button1)

            #在文本前面顯示圖像

            self.button2 = QPushButton("圖像按鈕")

            self.button2.setIcon(QIcon(QPixmap("./images/7.jpg")))

            self.button2.clicked.connect(lambda :self.whichButton(self.button2))

            layout.addWidget(self.button2)

            #設(shè)置按鈕不可用

            self.button3 = QPushButton("不可用的按鈕")

            self.button3.setEnabled(False)

            layout.addWidget(self.button3)

            self.button4 = QPushButton('&MyButton')

            self.button4.setDefault(True)

            self.button4.clicked.connect(lambda :self.whichButton(self.button4))

            layout.addWidget(self.button4)

            self.setLayout(layout)

            self.resize(400,300)

        def whichButton(self,btn):

            print('被單擊的按鈕是<' + btn.text()+ '>')

        def buttonState(self):

            if self.button1.isCheckable():

                print("按鈕1已經(jīng)被選中")

            else:

                print("按鈕1未被選中")

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = QPushButtonDemo()

        main.show()

        sys.exit(app.exec_())

二十六.使用QDialog顯示通用對(duì)話框

    '''

    使用 QDialog顯示通用對(duì)話框

    基類 QDialog,在此基礎(chǔ)上有擴(kuò)展了4個(gè)

    QMessageBox 消息對(duì)話框

    QColorDialog 顏色對(duì)話框

    QFontDialog 字體對(duì)話框

    QInputDialog 獲取用戶輸入信息的對(duì)話框

    窗口

    QMainWindow

    QWidget

    QDialog  沒有菜單

    '''

    #主窗口中點(diǎn)擊按鈕顯示對(duì)話框

    import sys

    from PyQt5.QtGui import QIcon

    from PyQt5.QtWidgets import *

    from PyQt5.QtGui import *

    from PyQt5.QtCore import *

    class QDialogDemo(QMainWindow):

        def __init__(self):

            super(QDialogDemo,self).__init__()

            self.initUI()

        def initUI(self):

            self.setWindowTitle("QDialog案例")

            self.resize(300,200)

            #常見button

            self.button  =  QPushButton(self)

            self.button.setText("彈出對(duì)話框")

            self.button.move(50,50)

            self.button.clicked.connect(self.showDialog)

        def showDialog(self):

            dialog = QDialog()

            button =  QPushButton("確定",dialog)

            button.clicked.connect(dialog.close)

            button.move(50,50)

            dialog.setWindowTitle("對(duì)話框")

            dialog.setWindowModality(Qt.ApplicationModal) #設(shè)置模式

            dialog.exec()  #顯示對(duì)話框

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = QDialogDemo()

        main.show()

        sys.exit(app.exec_())

效果:

二十七.顯示不同類型的消息對(duì)話框

    '''

    顯示不同類型的消息對(duì)話框

    消息對(duì)話框:QMessageBox

    1.關(guān)于對(duì)話框

    2.錯(cuò)誤對(duì)話框

    3,警告對(duì)話框

    4.提問對(duì)話框

    5.消息對(duì)話框

    有兩點(diǎn)差異

    1.顯示的對(duì)話框圖標(biāo)可能不同

    2.顯示的按鈕是不一樣的

    '''

    import sys

    from PyQt5.QtGui import QIcon

    from PyQt5.QtWidgets import *

    from PyQt5.QtGui import *

    from PyQt5.QtCore import *

    class QMessageBoxDemo(QWidget):

        def __init__(self):

            super(QMessageBoxDemo,self).__init__()

            self.initUI()

        def initUI(self):

            self.setWindowTitle("QMessageBox 案例")

            self.resize(300,400)

            #垂直布局

            layout = QVBoxLayout()

            self.button1 = QPushButton()

            self.button1.setText("顯示對(duì)話框")

            self.button1.clicked.connect(self.showDialog)

            layout = QVBoxLayout()

            #關(guān)于對(duì)話框

            self.button1 = QPushButton()

            self.button1.setText("顯示關(guān)于對(duì)話框")

            self.button1.clicked.connect(self.showDialog)

            #顯示消息對(duì)話框

            self.button2 = QPushButton()

            self.button2.setText("顯示消息對(duì)話框")

            self.button2.clicked.connect(self.showDialog) #所有都綁定到一個(gè)槽上

            #顯示警告對(duì)話框

            self.button3 = QPushButton()

            self.button3.setText("顯示警告對(duì)話框")

            self.button3.clicked.connect(self.showDialog)

            #顯示錯(cuò)誤對(duì)話框

            self.button4 = QPushButton()

            self.button4.setText("顯示錯(cuò)誤對(duì)話框")

            self.button4.clicked.connect(self.showDialog)  # 所有都

            #顯示提問對(duì)話框

            self.button5 = QPushButton()

            self.button5.setText("顯示提問對(duì)話框")

            self.button5.clicked.connect(self.showDialog)  # 所有都

            layout.addWidget(self.button1)

            layout.addWidget(self.button2)

            layout.addWidget(self.button3)

            layout.addWidget(self.button4)

            layout.addWidget(self.button5)

            self.setLayout(layout)

        def showDialog(self):

            text = self.sender().text()

            if text == "顯示關(guān)于對(duì)話框":

                QMessageBox.about(self,"關(guān)于","這是一個(gè)關(guān)于對(duì)話框")

            elif text =="顯示消息對(duì)話框":

                reply = QMessageBox.information(self,"消息","這是一個(gè)消息對(duì)話框",QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)

                print(reply == QMessageBox.Yes)

            elif text =="顯示警告對(duì)話框":

                QMessageBox.warning(self,"警告","這是一個(gè)警告對(duì)話框",QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)

            elif text == "顯示錯(cuò)誤對(duì)話框":

                QMessageBox.critical(self, "錯(cuò)誤", "這是一個(gè)錯(cuò)誤對(duì)話框", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)

            elif text =="顯示提問對(duì)話框":

                QMessageBox.question(self,"提問","這是一個(gè)提問對(duì)話框",QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = QMessageBoxDemo()

        main.show()

        sys.exit(app.exec_())

二十八.顯示不同類型的消息對(duì)話框

    '''

    輸入對(duì)話框 :QInputDialog

    QInputDialog.getItem用來顯示輸入列表

    QInputDialog.getText

    QInputDialog.getInt 與計(jì)數(shù)器控件有關(guān)

    '''

    import sys

    from PyQt5.QtGui import QIcon

    from PyQt5.QtWidgets import *

    from PyQt5.QtGui import *

    from PyQt5.QtCore import *

    class QInputDialogDemo(QWidget):

        def __init__(self):

            super(QInputDialogDemo,self).__init__()

            self.initUI()

        def initUI(self):

            self.setWindowTitle("輸入對(duì)話框")

            #創(chuàng)建表單布局

            layout = QFormLayout()

            self.button1 = QPushButton("獲取列表中的選項(xiàng)")

            self.button1.clicked.connect(self.getItem)

            self.lineEdit1 = QLineEdit()

            layout.addRow(self.button1,self.lineEdit1)

            self.button2 = QPushButton("獲取字符串")

            self.button2.clicked.connect(self.getText)

            self.lineEdit2 = QLineEdit()

            layout.addRow(self.button2, self.lineEdit2)

            self.button3 = QPushButton("獲取整數(shù)")

            self.button3.clicked.connect(self.getInt)

            self.lineEdit3 = QLineEdit()

            layout.addRow(self.button3, self.lineEdit3)

            self.setLayout(layout)

        def getItem(self):

            items = ("C","C++","Python","Java","Rudy")

            item,ok = QInputDialog.getItem(self,"請(qǐng)選擇編程語言","語言列表",items)

            if ok and item:

                self.lineEdit1.setText(item)

        def getText(self):

            text, ok = QInputDialog.getText(self, "文本輸入框", "輸入姓名")

            if ok and text:

                self.lineEdit2.setText(text)

        def getInt(self):

            num,ok = QInputDialog.getInt(self,"整數(shù)輸入框","輸入數(shù)字")

            if ok and num:

                self.lineEdit3.setText(str(num))

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = QInputDialogDemo()

        main.show()

        sys.exit(app.exec_())

效果: 

二十九.文件對(duì)話框

    '''

    文件對(duì)話框:QFileDialog

    '''

    import sys

    from PyQt5.QtGui import QIcon

    from PyQt5.QtWidgets import *

    from PyQt5.QtGui import *

    from PyQt5.QtCore import *

    class QFileDialogDemo(QWidget):

        def __init__(self):

            super(QFileDialogDemo,self).__init__()

            self.initUI()

        def initUI(self):

            #垂直布局

            layout = QVBoxLayout()

            self.button1 = QPushButton("加載圖片")

            self.button1.clicked.connect(self.loadImage)

            layout.addWidget(self.button1)

            self.imageLabel = QLabel()

            layout.addWidget(self.imageLabel)

            self.button2 = QPushButton("加載文本文件")

            self.button2.clicked.connect(self.loadText)

            layout.addWidget(self.button2)

            self.contents = QTextEdit()

            layout.addWidget(self.contents)

            self.setLayout(layout)

            self.setWindowTitle("文件對(duì)話框演示")

        def loadImage(self):

            # 選擇單個(gè)文件

            fname, _ = QFileDialog.getOpenFileName(self, "打開文件", ".", "圖像文件(*.jpg *.png)")

            self.imageLabel.setPixmap(QPixmap(fname))

        def loadText(self):

            dialog = QFileDialog()

            dialog.setFileMode(QFileDialog.AnyFile)

            dialog.setFilter(QDir.Files)

            if dialog.exec():

                filenames = dialog.selectedFiles()

                f= open(filenames[0],encoding='utf-8',mode="r")

                with f:

                    data = f.read()

                    self.contents.setText(data)

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = QFileDialogDemo()

        main.show()

        sys.exit(app.exec_())

效果:

三十.選項(xiàng)卡控件

    '''

    選項(xiàng)卡控件:QTabWidget

    '''

    import sys

    from PyQt5.QtGui import QIcon

    from PyQt5.QtWidgets import *

    from PyQt5.QtGui import *

    from PyQt5.QtCore import *

    class TabWidgetDemo(QTabWidget):

        def __init__(self,parent=None):

            super(TabWidgetDemo,self).__init__(parent)

            self.setWindowTitle("選項(xiàng)卡控件:QTabWidget")

            #創(chuàng)建用于顯示控件的窗口

            self.tab1 = QWidget()

            self.tab2 = QWidget()

            self.tab3 = QWidget()

            self.addTab(self.tab1,"選項(xiàng)卡1")

            self.addTab(self.tab2, "選項(xiàng)卡2")

            self.addTab(self.tab3, "選項(xiàng)卡3")

            self.tab1UI()

            self.tab2UI()

            self.tab3UI()

        def tab1UI(self):

            #表單布局

            layout = QFormLayout()

            layout.addRow("姓名",QLineEdit())

            layout.addRow("地址", QLineEdit())

            self.setTabText(0,"聯(lián)系方式")

            self.tab1.setLayout(layout)

        def tab2UI(self):

            #水平布局

            layout = QFormLayout()

            sex = QHBoxLayout()

            sex.addWidget(QRadioButton("男"))

            sex.addWidget(QRadioButton("女"))

            layout.addRow(QLabel("性別"),sex)

            layout.addRow("生日",QLineEdit())

            self.setTabText(1,"個(gè)人詳細(xì)信息")

            self.tab2.setLayout(layout)

        def tab3UI(self):

            #水平布局

            layout = QHBoxLayout()

            layout.addWidget(QLabel("科目"))

            layout.addWidget(QCheckBox("物理"))

            layout.addWidget(QCheckBox("高數(shù)"))

            self.setTabText(2, "教育程度")

            self.tab3.setLayout(layout)

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = TabWidgetDemo()

        main.show()

        sys.exit(app.exec_())

效果: 

三十一.堆棧窗口控件

    '''

    堆棧窗口控件(QStackeWidget)

    '''

    import sys

    from PyQt5.QtGui import QIcon

    from PyQt5.QtWidgets import *

    from PyQt5.QtGui import *

    from PyQt5.QtCore import *

    class QStackeWidgetDemo(QWidget):

        def __init__(self):

            super(QStackeWidgetDemo,self).__init__()

            self.setGeometry(300,50,10,10)

            self.setWindowTitle("堆棧窗口控件:QStackeWidget")

            self.list = QListWidget()

            self.list.insertItem(0,"聯(lián)系方式")

            self.list.insertItem(1, "個(gè)人信息")

            self.list.insertItem(2, "教育程度")

            #三個(gè)頁面

            self.stack1 = QWidget()  #對(duì)于一個(gè)頁面的窗口

            self.stack2 = QWidget()

            self.stack3 = QWidget()

            self.tab1UI()  #通過這三個(gè)方法,給每一頁添加控件

            self.tab2UI()

            self.tab3UI()

            self.stack = QStackedWidget()

            self.stack.addWidget(self.stack1)  #添加至堆棧中

            self.stack.addWidget(self.stack2)

            self.stack.addWidget(self.stack3)

            hbox = QHBoxLayout()

            hbox.addWidget(self.list)

            hbox.addWidget(self.stack)

            self.setLayout(hbox)

            self.list.currentRowChanged.connect(self.display)

        #通過這個(gè)函數(shù)來切換索引

        def display(self,index):

            self.stack.setCurrentIndex(index)

        def tab1UI(self):

            #表單布局

            layout = QFormLayout()

            layout.addRow("姓名",QLineEdit())

            layout.addRow("地址", QLineEdit())

            self.stack1.setLayout(layout)

        def tab2UI(self):

            #水平布局

            layout = QFormLayout()

            sex = QHBoxLayout()

            sex.addWidget(QRadioButton("男"))

            sex.addWidget(QRadioButton("女"))

            layout.addRow(QLabel("性別"),sex)

            layout.addRow("生日",QLineEdit())

            self.stack2.setLayout(layout)

        def tab3UI(self):

            #水平布局

            layout = QHBoxLayout()

            layout.addWidget(QLabel("科目"))

            layout.addWidget(QCheckBox("物理"))

            layout.addWidget(QCheckBox("高數(shù)"))

            self.stack3.setLayout(layout)

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = QStackeWidgetDemo()

        main.show()

        sys.exit(app.exec_())

效果: 

 三十二.??靠丶?/p>

    '''

    停靠部件QDockWidget

    '''

    import sys

    from PyQt5.QtGui import QIcon

    from PyQt5.QtWidgets import *

    from PyQt5.QtGui import *

    from PyQt5.QtCore import *

    class DockDemo(QMainWindow):

        def __init__(self,parent=None):

            super(DockDemo,self).__init__(parent)

            self.setWindowTitle("??靠丶篞DockWidget")

            layout = QHBoxLayout()

            self.items = QDockWidget("Dockable",self)

            self.listWidget = QListWidget()

            self.listWidget.addItem("item1")

            self.listWidget.addItem("item2")

            self.listWidget.addItem("item3")

            self.items.setWidget(self.listWidget)

            self.setCentralWidget(QLineEdit())

            self.items.setFloating(True)

            self.addDockWidget(Qt.RightDockWidgetArea,self.items)

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = DockDemo()

        main.show()

        sys.exit(app.exec_())

效果:

三十三.容納多文檔的窗口

    '''

    容納多文檔的窗口

    容納多文檔的 QMdiArea

    多文檔子窗口類 QMdiSubWindow

    將QMdiSubWindow添加至QMdiArea中

    '''

    import sys

    from PyQt5.QtGui import QIcon

    from PyQt5.QtWidgets import *

    from PyQt5.QtGui import *

    from PyQt5.QtCore import *

    class MultiDemo(QMainWindow):

        count = 0

        def __init__(self,parent=None):

            super(MultiDemo,self).__init__(parent)

            self.setWindowTitle("容納多文檔的窗口")

            #層疊,平鋪

            self.mdi = QMdiArea()

            self.setCentralWidget(self.mdi)

            bar = self.menuBar()

            file = bar.addMenu("File")

            file.addAction("New")  #新創(chuàng)建窗口

            file.addAction("cascade")  #顯示方式,層疊

            file.addAction("Tiled")#顯示方式,平鋪

            file.triggered.connect(self.windowaction)

        def windowaction(self,q):

            print(q.text())

            if q.text() == "New":

                MultiDemo.count = MultiDemo.count +1

                sub = QMdiSubWindow()

                sub.setWidget(QTextEdit())

                sub.setWindowTitle("子窗口"+str(MultiDemo.count))

                self.mdi.addSubWindow(sub)

                sub.show()

            elif q.text() =="cascade":

                self.mdi.cascadeSubWindows()

            elif q.text() =="Tiled":

                self.mdi.tileSubWindows()

    if __name__ == '__main__':

        app = QApplication(sys.argv)

        app.setWindowIcon(QIcon('./images/t10.ico'))

        main = MultiDemo()

        main.show()

        sys.exit(app.exec_())

效果:

————————————————

版權(quán)聲明:本文為CSDN博主「kww_」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/qq_40243295/article/details/105633221

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多