需要 from PyQt5.QtWidgets import QPushButton
繼承 QObject-->QWidget-->QAbstractButton-->QPushButton
創建按鈕控件:
QPushButton() 創建一個無父控件的按鈕控件
QPushButton(parent) 創建控件的同時, 設置父控件
QPushButton(text, parent) 創建控件的同時, 設置提示文本和父控件
QPushButton(icon, text, parent) 創建控件的同時, 設置圖標, 提示文本和父控件
菜單設置:
需要 from PyQt5.QtWidgets import QMenu
setMenu(QMenu) 設置菜單
menu() 獲取菜單
showMenu() 展示菜單
from PyQt5.QtWidgets import QApplication, QWidget,QPushButton,QMenu,QAction import sys from PyQt5.QtGui import QIcon class win(QWidget): def __init__(self): super().__init__() self.resize(300,300) self.setWindowTitle('菜單') self.num=0 self.btn=QPushButton('按鈕1',self) self.btn.move(100,50) self.btn.setIcon(QIcon('大象.png')) menu=QMenu() #創建菜單 #action1=QAction(menu) #創建行為 #這個行為要有父對象self或menu,否則不顯示 #action1.setText('新建') #行為顯示的文本 #action1.setIcon(QIcon('新建.png')) #給行為添加圖標 action1 = QAction(QIcon('新建.png'),'新建',menu) #創建行為 menu.addAction(action1) #給菜單添加行為
#每次只能添加一個行為
menu.addSeparator() #添加分割線 action2 = QAction(QIcon('打開.png'), '打開', menu) menu.addAction(action2) self.btn.setMenu(menu) #給按鈕設置菜單 action1.triggered.connect(lambda :print('新建文件')) #點擊行為時連接的槽函數 menu1=QMenu(menu) #創建子菜單 menu1.setTitle('最近打開') #給子菜單設置標題 menu.addMenu(menu1) #添加子菜單 if __name__=='__main__': app=QApplication(sys.argv) w=win() w.show() #w.btn.showMenu() #自動顯示菜單 sys.exit(app.exec_())
信號:
QAbstractButton:
pressed() 鼠標按下信號
released() 鼠標釋放
clicked() 控件內按下+控件內釋放
toggled(bool checked) 切換信號(一般在單選框或者復選框中使用)
QWidget:
windowTitleChanged(QString) 窗口標題改變信號
windowIconChanged(QIcon) 窗口圖標改變信號
customContextMenuRequested(QPoint) 自定義上下文菜單請求信號
是否扁平:
setFlat(bool) 是否扁平
默認值為False 設置了此屬性,則除非按下按鈕,否則大多數樣式都不會繪制按鈕背景
isFlat() 獲取當前按鈕邊框是否扁平
默認處理:
setAutoDefault(bool) 設置為自動默認按鈕
在某些GUI樣式中,默認按鈕被繪制,其周圍有一個額外的框架,最多3個像素或更多。Qt會自動在自動默認按鈕周圍保留此空間,即自動默認按鈕可能會有稍大的提示
對於具有QDialog父級的按鈕,此屬性的默認值為true ; 否則默認為false。
setDefault(bool) 設置是否默認按鈕
autoDefault() 返回是否自動默認
isDefault() 是否默認按鈕
右鍵菜單:
方法一:重寫控件方法 contextMenuEvent()
from PyQt5.QtWidgets import QApplication, QWidget,QPushButton,QMenu,QAction import sys class win(QWidget): def contextMenuEvent(self, evt) : #在控件內右擊事件 menu=QMenu(self) action1 = QAction(menu) # 創建行為 action1.setText('右擊菜單') action2 = QAction(menu) # 創建行為 action2.setText('右擊菜單1') menu.addAction(action1) # 給菜單添加行為 menu.addAction(action2) menu.exec_(evt.globalPos()) #展示菜單 #參數 坐標-相對於屏幕 def __init__(self): super().__init__() self.resize(300,300) self.setWindowTitle('右擊菜單') if __name__=='__main__': app=QApplication(sys.argv) w=win() w.show() sys.exit(app.exec_())
方法二:
from PyQt5.QtWidgets import QApplication, QWidget,QPushButton,QMenu,QAction import sys from PyQt5.QtCore import Qt class win(QWidget): def __init__(self): super().__init__() self.resize(300,300) self.setWindowTitle('右擊菜單') self.menu=QMenu() action1=QAction(self.menu) action1.setText('菜單1') self.menu.addAction(action1) action2 = QAction(self.menu) action2.setText('菜單2') self.menu.addAction(action2) self.setContextMenuPolicy(Qt.CustomContextMenu) # setContextMenuPolicy 設置菜單 # 參數Qt.CustomContextMenu 自定義菜單-此時右擊控件不會產生contextMenuEvent事件 # Qt.DefaultContextMenu 默認菜單;也就是右擊時發生contextMenuEvent事件(方法一) self.customContextMenuRequested.connect(self.menushow) #右擊時發出菜單請求信號 #會向槽函數傳遞鼠標點擊點的坐標-相對於控件 def menushow(self,point): point1=self.mapToGlobal(point) #將窗口坐標轉換成屏幕坐標 self.menu.exec_(point1) if __name__=='__main__': app=QApplication(sys.argv) w=win() w.show() sys.exit(app.exec_())