久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

PyQt6工具欄&菜單——QAction

 網(wǎng)摘文苑 2022-12-19 發(fā)布于新疆

接下來,我們將介紹一些常見的用戶界面元素,,您可能已經(jīng)在許多其他應(yīng)用程序中見過它們——工具欄和菜單,。我們還將探索Qt提供的簡潔系統(tǒng),,以最大限度地減少不同UI區(qū)域之間的重復(fù)—QAction。

Toolbars

最常見的用戶界面元素之一是工具欄。工具欄是用于執(zhí)行應(yīng)用程序中常見任務(wù)的圖標(biāo)和或文本操作,通過菜單訪問這些任務(wù)會(huì)很麻煩,。它們是許多應(yīng)用程序中最常見的UI特性之一。雖然一些復(fù)雜的應(yīng)用程序,特別是在Microsoft Office套件中,,已經(jīng)遷移到上下文“ribbon”界面,,但對(duì)于您將要?jiǎng)?chuàng)建的大多數(shù)應(yīng)用程序來說,標(biāo)準(zhǔn)工具欄通常已經(jīng)足夠了,。

文章圖片1

我們將從一個(gè)可以自定義的簡單框架應(yīng)用程序開始,。將以下代碼保存在一個(gè)名為app.py的文件中——此代碼是后面步驟所需的所有導(dǎo)入,。

import sysfrom PyQt6.QtWidgets import ( QMainWindow, QApplication, QLabel, QToolBar, QStatusBar)from PyQt6.QtGui import QAction, QIconfrom PyQt6.QtCore import Qtclass MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.setWindowTitle('My Awesome App')app = QApplication(sys.argv)w = MainWindow()w.show()app.exec()

如果您正在從PyQt5遷移到PyQt6,,請(qǐng)注意QAction現(xiàn)在是通過QtGui模塊使用。

添加工具欄

讓我們從向應(yīng)用程序添加工具欄開始,。

在Qt中,,工具欄是由QToolBar類創(chuàng)建的。首先創(chuàng)建類的實(shí)例,,然后在QMainWindow上調(diào)用.addToolbar,。傳遞一個(gè)字符串作為QToolBar的第一個(gè)參數(shù)來設(shè)置工具欄的名稱,該名稱將用于在UI中識(shí)別工具欄,。

class MainWindow(QMainWindow):    def __init__(self):        super(MainWindow, self).__init__()        self.setWindowTitle('My Awesome App')        label = QLabel('Hello!')        label.setAlignment(Qt.AlignmentFlag.AlignCenter)        self.setCentralWidget(label)        toolbar = QToolBar('My main toolbar')        self.addToolBar(toolbar)    def onMyToolBarButtonClick(self, s):        print('click', s)

運(yùn)行它,!你會(huì)看到窗口頂部有一條灰色的細(xì)條。這是你的工具欄,。右擊并單擊名稱將其切換,。

文章圖片2

我們應(yīng)該讓工具欄更有趣一點(diǎn)。我們可以只添加一個(gè)QButton控件,,但是Qt中有一個(gè)更好的方法可以讓你獲得一些額外的功能——那就是通過QAction,。QAction是一個(gè)提供描述抽象用戶界面的方法的類。在英語中,,這意味著您可以在單個(gè)對(duì)象中定義多個(gè)接口元素,,并通過與該元素交互的效果進(jìn)行統(tǒng)一。例如,,通常在工具欄和菜單中都有表示功能的功能——想象一下像Edit->Cut這樣的東西,,它既出現(xiàn)在編輯菜單中,也出現(xiàn)在工具欄中,,就像一把剪刀,,還可以通過鍵盤快捷鍵Ctrl-X (Mac上的Cmd-X)。

如果沒有QAction,,你將不得不在多個(gè)地方定義它,。但是使用QAction,您可以定義一個(gè)單獨(dú)的QAction,,定義觸發(fā)的操作,,然后將該操作添加到菜單和工具欄。每個(gè)QAction都有您可以連接到的名稱、狀態(tài)消息,、圖標(biāo)和信號(hào)(以及更多),。

在下面的代碼中,您可以看到添加了第一個(gè)QAction,。

class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.setWindowTitle('My Awesome App') label = QLabel('Hello!') label.setAlignment(Qt.AlignmentFlag.AlignCenter) self.setCentralWidget(label) toolbar = QToolBar('My main toolbar') self.addToolBar(toolbar) button_action = QAction('Your button', self) button_action.setStatusTip('This is your button') button_action.triggered.connect(self.onMyToolBarButtonClick) toolbar.addAction(button_action) def onMyToolBarButtonClick(self, s): print('click', s)

首先,,我們創(chuàng)建一個(gè)函數(shù),它將接受來自QAction的信號(hào),,這樣我們就可以看到它是否在工作,。接下來我們定義QAction本身。在創(chuàng)建實(shí)例時(shí),,我們可以為動(dòng)作和/或圖標(biāo)傳遞一個(gè)標(biāo)簽,。你還必須傳遞任何QObject作為動(dòng)作的父對(duì)象——這里我們傳遞self作為對(duì)主窗口的引用。奇怪的是,,QAction的父元素是作為最后一個(gè)參數(shù)傳入的,。

接下來,我們可以選擇設(shè)置一個(gè)狀態(tài)提示-一旦我們有了一個(gè),,這個(gè)文本就會(huì)顯示在狀態(tài)欄上,。最后,我們將.triggered信號(hào)連接到自定義函數(shù),。這個(gè)信號(hào)將在QAction被觸發(fā)(或激活)時(shí)觸發(fā),。

運(yùn)行它!您應(yīng)該看到帶有您所定義的標(biāo)簽的按鈕,。點(diǎn)擊它,,我們的自定義函數(shù)將發(fā)出“click”和按鈕的狀態(tài)。

文章圖片3

為什么信號(hào)總是false,?傳遞的信號(hào)表示按鈕是否被選中,,由于我們的按鈕是不可選中的——只能點(diǎn)擊——它總是false。我們將很快展示如何使它成為checkable,。

接下來,,我們可以添加一個(gè)狀態(tài)欄。

我們通過調(diào)用QStatusBar來創(chuàng)建一個(gè)狀態(tài)欄對(duì)象,,以獲得一個(gè)新的狀態(tài)欄對(duì)象,,然后將其傳遞給.setStatusBar。因?yàn)槲覀儾恍枰淖儬顟B(tài)欄的設(shè)置,,我們也可以在創(chuàng)建它的時(shí)候把它傳遞進(jìn)來,,在一行中:

class MainWindow(QMainWindow):    def __init__(self):        super(MainWindow, self).__init__()        self.setWindowTitle('My Awesome App')        label = QLabel('Hello!')        label.setAlignment(Qt.AlignmentFlag.AlignCenter)        self.setCentralWidget(label)        toolbar = QToolBar('My main toolbar')        self.addToolBar(toolbar)        button_action = QAction('Your button', self)        button_action.setStatusTip('This is your button')        button_action.triggered.connect(self.onMyToolBarButtonClick)        toolbar.addAction(button_action)        self.setStatusBar(QStatusBar(self))    def onMyToolBarButtonClick(self, s):        print('click', s)

運(yùn)行它!將鼠標(biāo)懸停在工具欄按鈕上,,您將在狀態(tài)欄中看到狀態(tài)文本,。

文章圖片4

接下來我們要打開QAction可切換選項(xiàng),,點(diǎn)擊會(huì)打開,再次點(diǎn)擊會(huì)關(guān)閉,。為此,,我們簡單地調(diào)用QAction對(duì)象上的setCheckable(True)。

class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.setWindowTitle('My Awesome App') label = QLabel('Hello!') label.setAlignment(Qt.AlignmentFlag.AlignCenter) self.setCentralWidget(label) toolbar = QToolBar('My main toolbar') self.addToolBar(toolbar) button_action = QAction('Your button', self) button_action.setStatusTip('This is your button') button_action.triggered.connect(self.onMyToolBarButtonClick) button_action.setCheckable(True) toolbar.addAction(button_action) self.setStatusBar(QStatusBar(self)) def onMyToolBarButtonClick(self, s): print('click', s)

運(yùn)行它,!單擊按鈕,,查看它從選中狀態(tài)切換到未選中狀態(tài)。注意,,我們現(xiàn)在創(chuàng)建的自定義slot函數(shù)交替輸出True和False,。

文章圖片5

還有一個(gè).toggled信號(hào),它只在按鈕被切換時(shí)發(fā)出信號(hào),。但效果是一樣的,,所以基本上毫無意義,。

現(xiàn)在看起來很簡陋-所以讓我們添加一個(gè)圖標(biāo)到我們的按鈕,。為此,我建議你從阿里ICON下載圖標(biāo),,可以給你的應(yīng)用程序一個(gè)漂亮的專業(yè)外觀,。

文章圖片6

從集合中選擇一張圖像(在這里的示例中,我選擇了文件bug.png),,并將其復(fù)制到與源代碼相同的文件夾中,。我們可以通過將文件名傳遞給類來創(chuàng)建一個(gè)QIcon對(duì)象,例如QIcon('bug.png')——如果你將文件放在另一個(gè)文件夾中,,你將需要一個(gè)完整的相對(duì)路徑或絕對(duì)路徑,。最后,要將圖標(biāo)添加到QAction(以及按鈕),,我們只需在創(chuàng)建QAction時(shí)將其作為第一個(gè)參數(shù)傳入,。

你還需要讓工具欄知道你的圖標(biāo)有多大,否則你的圖標(biāo)會(huì)被大量的填充所包圍,。你可以通過調(diào)用帶有QSize對(duì)象的setIconSize()來做到這一點(diǎn),。

class MainWindow(QMainWindow):    def __init__(self):        super(MainWindow, self).__init__()        self.setWindowTitle('My Awesome App')        label = QLabel('Hello!')        label.setAlignment(Qt.AlignmentFlag.AlignCenter)        self.setCentralWidget(label)        toolbar = QToolBar('My main toolbar')        toolbar.setIconSize(QSize(16,16))        self.addToolBar(toolbar)        button_action = QAction(QIcon('bug.png'), 'Your button', self)        button_action.setStatusTip('This is your button')        button_action.triggered.connect(self.onMyToolBarButtonClick)        button_action.setCheckable(True)        toolbar.addAction(button_action)        self.setStatusBar(QStatusBar(self))    def onMyToolBarButtonClick(self, s):        print('click', s)
文章圖片7

請(qǐng)注意,Qt使用您的操作系統(tǒng)默認(rèn)設(shè)置來確定是在工具欄中顯示圖標(biāo),、文本還是圖標(biāo)和文本,。但是你可以使用.setToolButtonStyle來覆蓋它。該插槽接受來自Qt.命名空間的以下任何標(biāo)志:

PyQt6 flag (long name)

行為

Qt.ToolButtonIconOnly

只有圖標(biāo),,沒有text

Qt.ToolButtonTextOnly

只有text,,沒有圖標(biāo)

Qt.ToolButtonTextBesideIcon

圖標(biāo)和文本,文本在圖標(biāo)旁邊

Qt.ToolButtonTextUnderIcon

圖標(biāo)和文本,,文本在圖標(biāo)下邊

Qt.ToolButtonFollowStyle

請(qǐng)遵循主機(jī)桌面風(fēng)格

默認(rèn)值是Qt.ToolButtonFollowStyle,,這意味著您的應(yīng)用程序?qū)⒛J(rèn)遵循應(yīng)用程序運(yùn)行的桌面的標(biāo)準(zhǔn)/全局設(shè)置,。通常建議這樣做,以使您的應(yīng)用程序感覺盡可能原生,。

最后,,我們可以在工具欄上添加一些零碎的東西。我們將添加第二個(gè)按鈕和復(fù)選框控件,。如前所述,,你可以在這里放任何控件,所以你可以盡情地瘋狂,。

import sysfrom PyQt6.QtCore import QSize, Qtfrom PyQt6.QtGui import QAction, QIconfrom PyQt6.QtWidgets import ( QApplication, QCheckBox, QLabel, QMainWindow, QStatusBar, QToolBar,)class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('My App') label = QLabel('Hello!') label.setAlignment(Qt.AlignmentFlag.AlignCenter) self.setCentralWidget(label) toolbar = QToolBar('My main toolbar') toolbar.setIconSize(QSize(16, 16)) self.addToolBar(toolbar) button_action = QAction(QIcon('bug.png'), '&Your button', self) button_action.setStatusTip('This is your button') button_action.triggered.connect(self.onMyToolBarButtonClick) button_action.setCheckable(True) toolbar.addAction(button_action) toolbar.addSeparator() button_action2 = QAction(QIcon('bug.png'), 'Your &button2', self) button_action2.setStatusTip('This is your button2') button_action2.triggered.connect(self.onMyToolBarButtonClick) button_action2.setCheckable(True) toolbar.addAction(button_action2) toolbar.addWidget(QLabel('Hello')) toolbar.addWidget(QCheckBox()) self.setStatusBar(QStatusBar(self)) def onMyToolBarButtonClick(self, s): print('click', s)app = QApplication(sys.argv)window = MainWindow()window.show()app.exec()
文章圖片8

菜單

菜單是ui的另一個(gè)標(biāo)準(zhǔn)組件,。通常情況下,它們位于窗口的頂部,,或者macOS上的屏幕頂部,。它們?cè)试S訪問所有標(biāo)準(zhǔn)應(yīng)用程序功能。有一些標(biāo)準(zhǔn)的菜單-例如文件,,編輯,,幫助。菜單可以嵌套,,以創(chuàng)建功能的層次樹,,它們通常支持并顯示鍵盤快捷鍵,以便快速訪問其功能,。

文章圖片9

為了創(chuàng)建菜單,,我們?cè)赒MainWindow上創(chuàng)建了一個(gè)名為.menuBar()的菜單欄。我們通過調(diào)用.addMenu()在菜單欄上添加一個(gè)菜單,,并傳入菜單的名稱,。我把它叫做'&File'。&號(hào)定義了一個(gè)快速鍵,,當(dāng)按Alt鍵時(shí)可以跳轉(zhuǎn)到此菜單,。

這在macOS上不可見。注意,,這與鍵盤快捷鍵是不同的-我們將很快介紹它,。

我們可以重用已經(jīng)存在的QAction,向菜單中添加相同的功能,。要添加一個(gè)動(dòng)作,,可以調(diào)用.addAction來傳遞一個(gè)已定義的動(dòng)作。

class MainWindow(QMainWindow):    def __init__(self):        super().__init__()        self.setWindowTitle('My App')        label = QLabel('Hello!')        label.setAlignment(Qt.AlignmentFlag.AlignCenter)        self.setCentralWidget(label)        toolbar = QToolBar('My main toolbar')        toolbar.setIconSize(QSize(16, 16))        self.addToolBar(toolbar)        button_action = QAction(QIcon('bug.png'), '&Your button', self)        button_action.setStatusTip('This is your button')        button_action.triggered.connect(self.onMyToolBarButtonClick)        button_action.setCheckable(True)        toolbar.addAction(button_action)        toolbar.addSeparator()        button_action2 = QAction(QIcon('bug.png'), 'Your &button2', self)        button_action2.setStatusTip('This is your button2')        button_action2.triggered.connect(self.onMyToolBarButtonClick)        button_action2.setCheckable(True)        toolbar.addAction(button_action2)        toolbar.addWidget(QLabel('Hello'))        toolbar.addWidget(QCheckBox())        self.setStatusBar(QStatusBar(self))        menu = self.menuBar()        file_menu = menu.addMenu('&File')        file_menu.addAction(button_action)    def onMyToolBarButtonClick(self, s):        print('click', s)

單擊菜單中的項(xiàng)目,,你會(huì)注意到它是可切換的-它繼承了QAction的功能,。

文章圖片10

我們?cè)僭诓藛紊霞有〇|西吧。在這里,,我們將向菜單添加一個(gè)分隔符,,它將在菜單中顯示為一條水平線,,然后添加我們創(chuàng)建的第二個(gè)QAction。

class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('My App') label = QLabel('Hello!') label.setAlignment(Qt.AlignmentFlag.AlignCenter) self.setCentralWidget(label) toolbar = QToolBar('My main toolbar') toolbar.setIconSize(QSize(16, 16)) self.addToolBar(toolbar) button_action = QAction(QIcon('bug.png'), '&Your button', self) button_action.setStatusTip('This is your button') button_action.triggered.connect(self.onMyToolBarButtonClick) button_action.setCheckable(True) toolbar.addAction(button_action) toolbar.addSeparator() button_action2 = QAction(QIcon('bug.png'), 'Your &button2', self) button_action2.setStatusTip('This is your button2') button_action2.triggered.connect(self.onMyToolBarButtonClick) button_action2.setCheckable(True) toolbar.addAction(button_action2) toolbar.addWidget(QLabel('Hello')) toolbar.addWidget(QCheckBox()) self.setStatusBar(QStatusBar(self)) menu = self.menuBar() file_menu = menu.addMenu('&File') file_menu.addAction(button_action) file_menu.addSeparator() file_menu.addAction(button_action2) def onMyToolBarButtonClick(self, s): print('click', s)

運(yùn)行它!您應(yīng)該看到兩個(gè)菜單項(xiàng)之間有一條線,。

文章圖片11

還可以使用&號(hào)向菜單添加加速鍵,,以允許在菜單項(xiàng)打開時(shí)使用單個(gè)鍵跳轉(zhuǎn)到該菜單項(xiàng)。同樣,,這在macOS上無效,。

要添加子菜單,只需在父菜單上調(diào)用addMenu()創(chuàng)建一個(gè)新菜單,。然后,,您可以像往常一樣向它添加操作。例如:

class MainWindow(QMainWindow):    def __init__(self):        super().__init__()        self.setWindowTitle('My App')        label = QLabel('Hello!')        label.setAlignment(Qt.AlignmentFlag.AlignCenter)        self.setCentralWidget(label)        toolbar = QToolBar('My main toolbar')        toolbar.setIconSize(QSize(16, 16))        self.addToolBar(toolbar)        button_action = QAction(QIcon('bug.png'), '&Your button', self)        button_action.setStatusTip('This is your button')        button_action.triggered.connect(self.onMyToolBarButtonClick)        button_action.setCheckable(True)        toolbar.addAction(button_action)        toolbar.addSeparator()        button_action2 = QAction(QIcon('bug.png'), 'Your &button2', self)        button_action2.setStatusTip('This is your button2')        button_action2.triggered.connect(self.onMyToolBarButtonClick)        button_action2.setCheckable(True)        toolbar.addAction(button_action2)        toolbar.addWidget(QLabel('Hello'))        toolbar.addWidget(QCheckBox())        self.setStatusBar(QStatusBar(self))        menu = self.menuBar()        file_menu = menu.addMenu('&File')        file_menu.addAction(button_action)        file_menu.addSeparator()        file_submenu = file_menu.addMenu('Submenu')        file_submenu.addAction(button_action2)    def onMyToolBarButtonClick(self, s):        print('click', s)
文章圖片12

最后,,我們將為QAction添加一個(gè)鍵盤快捷鍵,。通過傳遞setKeySequence()并傳入鍵序列來定義鍵盤快捷鍵。任何已定義的鍵序列都將出現(xiàn)在菜單中,。

請(qǐng)注意,,鍵盤快捷鍵與QAction相關(guān)聯(lián),無論QAction是否被添加到菜單或工具欄,,它都仍然有效,。

鍵序列可以通過多種方式定義——作為文本傳遞,,使用Qt名稱空間中的鍵名,,或者使用Qt名稱空間中已定義的鍵序列。盡可能使用后者,,以確保符合操作系統(tǒng)標(biāo)準(zhǔn),。

顯示工具欄按鈕和菜單的完整代碼如下所示:

class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('My App') label = QLabel('Hello!') # The `Qt` namespace has a lot of attributes to customize # widgets. See: http://doc./qt-5/qt.html label.setAlignment(Qt.AlignmentFlag.AlignCenter) # Set the central widget of the Window. Widget will expand # to take up all the space in the window by default. self.setCentralWidget(label) toolbar = QToolBar('My main toolbar') toolbar.setIconSize(QSize(16, 16)) self.addToolBar(toolbar) button_action = QAction(QIcon('bug.png'), '&Your button', self) button_action.setStatusTip('This is your button') button_action.triggered.connect(self.onMyToolBarButtonClick) button_action.setCheckable(True) # 您可以使用鍵名輸入鍵盤快捷鍵(e.g. Ctrl+p) # Qt.namespace標(biāo)識(shí)符(e.g. Qt.CTRL + Qt.Key_P) # 或者與系統(tǒng)無關(guān)的標(biāo)識(shí)符(e.g. QKeySequence.Print) button_action.setShortcut(QKeySequence('Ctrl+p')) toolbar.addAction(button_action) toolbar.addSeparator() button_action2 = QAction(QIcon('bug.png'), 'Your &button2', self) button_action2.setStatusTip('This is your button2') button_action2.triggered.connect(self.onMyToolBarButtonClick) button_action2.setCheckable(True) toolbar.addAction(button_action) toolbar.addWidget(QLabel('Hello')) toolbar.addWidget(QCheckBox()) self.setStatusBar(QStatusBar(self)) menu = self.menuBar() file_menu = menu.addMenu('&File') file_menu.addAction(button_action) file_menu.addSeparator() file_submenu = file_menu.addMenu('Submenu') file_submenu.addAction(button_action2) def onMyToolBarButtonClick(self, s): print('click', s)

運(yùn)行程序,使用快捷鍵“Ctrl+p”即可打印“click”,。

    本站是提供個(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)論公約

    類似文章 更多