工具欄工具欄是最常見的用戶界面元素之一。工具欄是用于在應(yīng)用程序中執(zhí)行常見任務(wù)的圖標和文本欄。 Qt工具欄支持圖標,文本的顯示,還可以包含任何標準Qt小部件。但是,對于按鈕,最好的方法是利用QAction系統(tǒng)在工具欄上放置按鈕。 讓我們從向應(yīng)用程序添加工具欄開始。 在Qt中,從QToolBar類創(chuàng)建工具欄。首先,創(chuàng)建該類的實例,然后調(diào)用.addToolbar。傳入字符串作為第一個參數(shù)來設(shè)置工具欄的名稱,該名稱將用于在UI中標識工具欄。 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īng)該使工具欄更有趣一些。我們可以只添加一個QButton部件,但在Qt中還有一個更好的方法可以讓你獲得一些很酷的特性——那就是通過QAction。QAction是一個類,它提供了一種描述抽象用戶接口的方法。在英語中,這意味著您可以在一個對象中定義多個接口元素,通過與該元素交互的效果來統(tǒng)一這些元素。例如,在工具欄和菜單中都有一些函數(shù)表示,比如Edit——>Cut,它既出現(xiàn)在編輯菜單中,也出現(xiàn)在工具欄上,就像剪刀一樣,也可以通過快捷鍵Ctrl-X (Mac上的Cmd-X)。 如果沒有QAction,就必須在多個地方定義它。但是使用QAction,您可以定義單個QAction,定義被觸發(fā)的動作,然后將這個動作添加到菜單和工具欄中。每個QAction都有您可以連接的名稱、狀態(tài)消息、圖標和信號(以及更多)。 在下面的代碼中,您可以看到添加了第一個QAction。
運行效果: 首先,我們創(chuàng)建接收QAction信號的函數(shù),這樣我們就可以看到它是否在工作。接下來我們定義QAction本身。在創(chuàng)建實例時,我們可以傳遞動作的標簽和/或圖標。您還必須傳遞任何QObject以作為操作的父對象——這里我們將self作為對主窗口的引用傳遞。 接下來,我們可以選擇設(shè)置一個狀態(tài)提示——一旦我們設(shè)置了一個狀態(tài)提示,這個文本將顯示在狀態(tài)欄上。最后,我們將.triggered信號連接到定制函數(shù)。這個信號將在QAction被觸發(fā)(或激活)時觸發(fā)。 接下來我們可以添加一個狀態(tài)欄。 我們通過調(diào)用QStatusBar來創(chuàng)建一個狀態(tài)欄對象,以獲得一個新的狀態(tài)欄對象,然后將其傳遞給。setstatusbar。因為我們不需要改變狀態(tài)欄的設(shè)置,我們也可以在創(chuàng)建時傳入它: 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 運行效果: 接下來,我們將把QAction切換為toggleable——點擊將選中它,再次點擊將選中取消。為此,我們在QAction對象上調(diào)用setCheckable(True)。
運行效果:
現(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 運行結(jié)果: 精美的16x16圖標
|
|