工具欄工具欄是最常見的用戶界面元素之一。工具欄是用于在應(yīng)用程序中執(zhí)行常見任務(wù)的圖標(biāo)和文本欄。 Qt工具欄支持圖標(biāo),文本的顯示,還可以包含任何標(biāo)準(zhǔn)Qt小部件。但是,對(duì)于按鈕,最好的方法是利用QAction系統(tǒng)在工具欄上放置按鈕。 讓我們從向應(yīng)用程序添加工具欄開始。 在Qt中,從QToolBar類創(chuàng)建工具欄。首先,創(chuàng)建該類的實(shí)例,然后調(diào)用.addToolbar。傳入字符串作為第一個(gè)參數(shù)來設(shè)置工具欄的名稱,該名稱將用于在UI中標(biāo)識(shí)工具欄。 import sysimport requestsimport jsonfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import QWidgetfrom PyQt5.QtWidgets import QApplicationfrom PyQt5.QtWidgets import QDesktopWidget, QMessageBox, QLabel, QPushButton, QActionfrom PyQt5.QtWidgets import QLineEdit, QTextEditfrom PyQt5.QtWidgets import QStatusBar from PyQt5.QtWidgets import QToolBarfrom PyQt5.QtWidgets import QMainWindow class MainWindow(QMainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.setWindowTitle('高效碼農(nóng)') label = QLabel('高效碼農(nóng)') label.setAlignment(Qt.AlignCenter) self.setCentralWidget(label) toolbar = QToolBar('高效碼農(nóng) Toolbar') self.addToolBar(toolbar) self.show() def onMyToolBarButtonClick(self, s): print('click', s)if __name__ == '__main__': app = QApplication(sys.argv) tools = MainWindow() sys.exit(app.exec_()) pass 運(yùn)行效果: 我們應(yīng)該使工具欄更有趣一些。我們可以只添加一個(gè)QButton部件,但在Qt中還有一個(gè)更好的方法可以讓你獲得一些很酷的特性——那就是通過QAction。QAction是一個(gè)類,它提供了一種描述抽象用戶接口的方法。在英語中,這意味著您可以在一個(gè)對(duì)象中定義多個(gè)接口元素,通過與該元素交互的效果來統(tǒng)一這些元素。例如,在工具欄和菜單中都有一些函數(shù)表示,比如Edit——>Cut,它既出現(xiàn)在編輯菜單中,也出現(xiàn)在工具欄上,就像剪刀一樣,也可以通過快捷鍵Ctrl-X (Mac上的Cmd-X)。 如果沒有QAction,就必須在多個(gè)地方定義它。但是使用QAction,您可以定義單個(gè)QAction,定義被觸發(fā)的動(dòng)作,然后將這個(gè)動(dòng)作添加到菜單和工具欄中。每個(gè)QAction都有您可以連接的名稱、狀態(tài)消息、圖標(biāo)和信號(hào)(以及更多)。 在下面的代碼中,您可以看到添加了第一個(gè)QAction。
運(yùn)行效果: 首先,我們創(chuàng)建接收QAction信號(hào)的函數(shù),這樣我們就可以看到它是否在工作。接下來我們定義QAction本身。在創(chuàng)建實(shí)例時(shí),我們可以傳遞動(dòng)作的標(biāo)簽和/或圖標(biāo)。您還必須傳遞任何QObject以作為操作的父對(duì)象——這里我們將self作為對(duì)主窗口的引用傳遞。 接下來,我們可以選擇設(shè)置一個(gè)狀態(tài)提示——一旦我們?cè)O(shè)置了一個(gè)狀態(tài)提示,這個(gè)文本將顯示在狀態(tài)欄上。最后,我們將.triggered信號(hào)連接到定制函數(shù)。這個(gè)信號(hào)將在QAction被觸發(fā)(或激活)時(shí)觸發(fā)。 接下來我們可以添加一個(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í)傳入它: import sysfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import QWidgetfrom PyQt5.QtWidgets import QApplicationfrom PyQt5.QtWidgets import QDesktopWidget, QMessageBox, QLabel, QPushButton, QActionfrom PyQt5.QtWidgets import QLineEdit, QTextEditfrom PyQt5.QtWidgets import QStatusBar from PyQt5.QtWidgets import QToolBarfrom PyQt5.QtWidgets import QMainWindow class MainWindow(QMainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.setWindowTitle('高效碼農(nóng) App') label = QLabel('高效碼農(nóng)!!!') label.setAlignment(Qt.AlignCenter) self.setCentralWidget(label) toolbar = QToolBar('高效碼農(nóng) toolbar') self.addToolBar(toolbar) button_action = QAction('高效碼農(nóng) button', self) button_action.setStatusTip('高效碼農(nóng) button') button_action.triggered.connect(self.onMyToolBarButtonClick) toolbar.addAction(button_action) self.setStatusBar(QStatusBar(self)) self.show() def onMyToolBarButtonClick(self, s): print('click', s)if __name__ == '__main__': app = QApplication(sys.argv) tools = MainWindow() sys.exit(app.exec_()) pass 運(yùn)行效果: 接下來,我們將把QAction切換為toggleable——點(diǎn)擊將選中它,再次點(diǎn)擊將選中取消。為此,我們?cè)赒Action對(duì)象上調(diào)用setCheckable(True)。
運(yùn)行效果:
現(xiàn)在界面功能基本完善,但是很丑;讓我們美化一下: import sysfrom PyQt5.QtCore import Qtfrom PyQt5.QtCore import QSizefrom PyQt5.QtGui import QIconfrom PyQt5.QtWidgets import QWidgetfrom PyQt5.QtWidgets import QApplicationfrom PyQt5.QtWidgets import QDesktopWidget, QMessageBox, QLabel, QPushButton, QActionfrom PyQt5.QtWidgets import QStatusBar from PyQt5.QtWidgets import QToolBarfrom PyQt5.QtWidgets import QMainWindow class MainWindow(QMainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.setWindowTitle('高效碼農(nóng) App') label = QLabel('高效碼農(nóng)!!!') label.setAlignment(Qt.AlignCenter) self.setCentralWidget(label) toolbar = QToolBar('My main toolbar') toolbar.setIconSize(QSize(16,16)) self.addToolBar(toolbar) button_action = QAction(QIcon('user.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)) self.show() def onMyToolBarButtonClick(self, s): print('click', s)if __name__ == '__main__': app = QApplication(sys.argv) tools = MainWindow() sys.exit(app.exec_()) pass 運(yùn)行結(jié)果: 精美的16x16圖標(biāo)
|
|