📜  pyqt5 按钮 - Python (1)

📅  最后修改于: 2023-12-03 15:04:01.021000             🧑  作者: Mango

PyQt5 按钮 - Python

简介

PyQt5是一款Python编程语言下的Qt5图形用户界面工具包。它同时支持GUI编程和非GUI编程,如控制台应用程序和CLI工具。

按钮是PyQt5中最基础的UI组件之一。它用于在GUI应用程序中触发操作或执行某些任务,并经常与其他UI组件一起使用。

创建按钮

要在PyQt5应用程序中创建按钮,需要使用QtWidgets库中的QPushButton类。

from PyQt5.QtWidgets import QApplication, QPushButton, QWidget
import sys

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 button'
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        button = QPushButton('Click me!', self)
        button.setToolTip('This is a QPushButton widget')
        button.move(100,70)
        button.clicked.connect(self.on_click)

        self.show()

    def on_click(self):
        print('You clicked me!')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

在上面的代码中,我们创建了一个按钮并将其添加到窗口中。我们使用move()方法来设置按钮的位置,并使用clicked信号连接到我们定义的on_click()方法。当点击按钮时,将打印消息“You clicked me!”到控制台上。

按钮事件

按钮有几种事件,包括单击事件、双击事件和右键单击事件。要为按钮设置这些事件,我们可以使用信号和槽(Slots)。

from PyQt5.QtWidgets import QApplication, QPushButton, QWidget
from PyQt5.QtCore import pyqtSlot
import sys

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 button events'
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        button = QPushButton('Click me!', self)
        button.setToolTip('This is a QPushButton widget')
        button.move(100,70)
        button.clicked.connect(self.on_click)
        button.doubleClicked.connect(self.on_double_click)
        button.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
        button.addAction(QtGui.QAction('Right click menu item 1',self))
        button.addAction(QtGui.QAction('Right click menu item 2',self))
        button.customContextMenuRequested.connect(self.on_context_menu)

        self.show()

    @pyqtSlot()
    def on_click(self):
        print('You clicked me!')

    @pyqtSlot()
    def on_double_click(self):
        print('You double clicked me!')

    @pyqtSlot()
    def on_context_menu(self):
        print('You right clicked me!')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

在这个例子中,我们定义了三个不同的槽方法,分别处理单击、双击和右键单击事件。我们还为按钮添加了右键单击上下文菜单,并为该菜单定义了两个菜单项。

按钮状态

按钮的状态可用、禁用或隐藏。要设置按钮的状态,可以使用setEnabled()、setDisabled()和setHidden()方法。

from PyQt5.QtWidgets import QApplication, QPushButton, QWidget
import sys

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 button status'
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        button1 = QPushButton('Enable me!', self)
        button1.setToolTip('This is a QPushButton widget')
        button1.move(100,70)
        button1.clicked.connect(self.enable_button2)

        button2 = QPushButton('I am disabled', self)
        button2.setToolTip('This is a disabled QPushButton widget')
        button2.move(100,120)
        button2.setDisabled(True)

        button3 = QPushButton('I am hidden', self)
        button3.setToolTip('This is a hidden QPushButton widget')
        button3.move(100,170)
        button3.setHidden(True)

        self.show()

    def enable_button2(self):
        self.button2.setEnabled(True)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

在这个例子中,我们创建了三个按钮,分别位于不同位置,并设置了不同的状态。当单击第一个按钮时,我们会将第二个按钮的状态设置为“可用”。

按钮样式

可以通过使用样式表(Stylesheet)来自定义按钮的样式。样式表是一种定义UI元素显示方式的技术,它与HTML和CSS有些相似。可以使用setStyleSheet()方法来设置样式表。

from PyQt5.QtWidgets import QApplication, QPushButton, QWidget
import sys

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 button style'
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        button1 = QPushButton('Default style', self)
        button1.setToolTip('This is a QPushButton widget')
        button1.move(100,70)

        button2 = QPushButton('Flat style', self)
        button2.setToolTip('This is a flat QPushButton widget')
        button2.move(100,120)
        button2.setStyleSheet('QPushButton {border-style: flat}')

        button3 = QPushButton('Custom style', self)
        button3.setToolTip('This is a custom QPushButton widget')
        button3.move(100,170)
        button3.setStyleSheet('QPushButton {background-color: red; color: white;}')

        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

在这个例子中,我们创建了三个按钮,在其中两个按钮上应用了样式表。第二个按钮是一个扁平按钮,第三个则是自定义样式表,设置了背景颜色和文本颜色。