
需要 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_())
