如何从另一个 python 文件访问 QPushButton?

How to access QPushButton from another python file?

我正在创建一个应用程序,并且有一个用于按钮方法的 python 文件。我试图通过单击它来更改按钮的样式表,但是,我无法从 class.

外部更改按钮

示例:(ui 来自 QtDesigner UI 文件)

Python 主文件:

class Main(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setupUi(self)
        self.button.clicked.connect(ButtonMethods.buttonPushButtonClicked)

Python 文件 ButtonMethods:

from Main import Main
def buttonPushButtonClicked():
    Main.button.setStyleSheet(...)

这样可以吗?我有很多按钮,我不想将所有方法塞进同一个 class.

我更愿意将所有内容放在一个 class 中,并在 buttonPushButtonClicked

中使用 self 而不是 Main
class Main(QtWidgets.QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setupUi(self)
        self.button.clicked.connect(self.buttonPushButtonClicked)  # <-- self (window instance)

    def buttonPushButtonClicked(self):  # <-- self (window instance)
        self.button.setStyleSheet(...)  # <-- self (window instance)

如果你需要它作为外部,那么你也应该发送 Main 的实例作为参数 - 但这样你就必须手动完成 - 即。使用 lambda 分配带参数的函数`

import ButtonMethods

class Main(QtWidgets.QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setupUi(self)
        self.button.clicked.connect(lambda:ButtonMethods.buttonPushButtonClicked(self)) # <-- self (window instance)

# --- file ButtonMethods.py ---

def buttonPushButtonClicked(window):  # <-- window instance
    window.button.setStyleSheet(...)  # <-- window instance

顺便说一句: 这样你可以发送按钮实例 self.button 而不是 window 实例 self

import ButtonMethods

class Main(QtWidgets.QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setupUi(self)
        self.button.clicked.connect(lambda:ButtonMethods.buttonPushButtonClicked(self.button)) # <-- self.button (button instance)

# --- file ButtonMethods.py ---

def buttonPushButtonClicked(button):  # <-- button instance
    button.setStyleSheet(...)         # <-- button instance

然后您可以使用不同按钮使用相同的功能。

但也许您应该使用 class PushButton 来创建自己的 class MyPushButton.