在单独的模块中访问 pyqt window 中的对象属性
Accessing object attributes in pyqt window in separate module
我在一个 python 模块中创建了一个主 window。该模块还包含一个 class 定义,用于创建一个名为 my_settings.
的对象
我还有一个单独的模块,它创建了另一个 window(由于各种原因应该在不同的模块中)。这 window 允许各种输入,例如打开文件和在单击按钮后存储一些设置 blaa blaa。
然后我想做的是修改my_setttings的属性。代码的简化版本是:
主模块
class MainWindow(QMainWindow):
def __init__(self,parent=None):
super(MainWindow, self).__init__(parent)
QMainWindow.__init__(self)
uic.loadUi(self.some_directory + "arc_custom_main.ui", self)
self.some_button.clicked.connect(self.open_some_widget)
def open_some_widget(self):
widget = widget_in_other_module(self)
widget_in_other_module.exec_()
app = QApplication(sys.argv)
my_settings=settings()
_mainWindow = MainWindow()
_mainWindow.show()
独立模块
class widget_in_other_module(QDialog):
def __init__(self, parent):
my_settings.temppath = my_settings.OutputDir
QDialog.__init__(self)
self.parent = parent
my_settings.some_attribute= foo
uic.loadUi("some.ui", self)
self.pushButtonOpenMain.clicked.connect(self.openMain)
def openMain(self):
my_settings.some_other_attibute=bar
我遇到的问题是我无法在 widget_in_other_module 的 openMain 方法中找到能够访问 my_settings 的方法。我是 qt 的新手,我终其一生都无法确定应该通过 my_settings 的地方。由于各种原因,我需要 widget_in_other_module 的所有功能都在主模块之外(主要是为了提高可读性和未来计划对主模块进行的更改)。我已经尽我所能地尝试了,例如将其作为参数包含在 self.pushButtonOpenMain.clicked.connect(self.openMain,my_settings) 行中,但这似乎是不允许的。我是不是漏掉了一些基本的东西?
在单独的模块中实例化设置变量,并在需要的地方导入该变量。它可以是 class 的对象或只是字典的对象。
storage.py
class Settings:
def __init__(self):
print("Settings")
my_settings = Settings()
MainWindow.py
from PyQt5.QtWidgets import QMainWindow, QApplication
import sys
from Widget import Widget
from storage import my_settings
class MainWindow(QMainWindow):
def __init__(self,parent=None):
super(MainWindow, self).__init__(parent)
QMainWindow.__init__(self)
self.open_some_widget()
def open_some_widget(self):
widget = Widget()
widget.show()
widget.test()
self._widget = widget
my_settings.foo = 10
app = QApplication(sys.argv)
_mainWindow = MainWindow()
_mainWindow.show()
app.exec_()
Widget.py
from PyQt5.QtWidgets import QWidget
from storage import my_settings
class Widget(QWidget):
def test(self):
print(my_settings.foo)
我在一个 python 模块中创建了一个主 window。该模块还包含一个 class 定义,用于创建一个名为 my_settings.
的对象我还有一个单独的模块,它创建了另一个 window(由于各种原因应该在不同的模块中)。这 window 允许各种输入,例如打开文件和在单击按钮后存储一些设置 blaa blaa。
然后我想做的是修改my_setttings的属性。代码的简化版本是:
主模块
class MainWindow(QMainWindow):
def __init__(self,parent=None):
super(MainWindow, self).__init__(parent)
QMainWindow.__init__(self)
uic.loadUi(self.some_directory + "arc_custom_main.ui", self)
self.some_button.clicked.connect(self.open_some_widget)
def open_some_widget(self):
widget = widget_in_other_module(self)
widget_in_other_module.exec_()
app = QApplication(sys.argv)
my_settings=settings()
_mainWindow = MainWindow()
_mainWindow.show()
独立模块
class widget_in_other_module(QDialog):
def __init__(self, parent):
my_settings.temppath = my_settings.OutputDir
QDialog.__init__(self)
self.parent = parent
my_settings.some_attribute= foo
uic.loadUi("some.ui", self)
self.pushButtonOpenMain.clicked.connect(self.openMain)
def openMain(self):
my_settings.some_other_attibute=bar
我遇到的问题是我无法在 widget_in_other_module 的 openMain 方法中找到能够访问 my_settings 的方法。我是 qt 的新手,我终其一生都无法确定应该通过 my_settings 的地方。由于各种原因,我需要 widget_in_other_module 的所有功能都在主模块之外(主要是为了提高可读性和未来计划对主模块进行的更改)。我已经尽我所能地尝试了,例如将其作为参数包含在 self.pushButtonOpenMain.clicked.connect(self.openMain,my_settings) 行中,但这似乎是不允许的。我是不是漏掉了一些基本的东西?
在单独的模块中实例化设置变量,并在需要的地方导入该变量。它可以是 class 的对象或只是字典的对象。
storage.py
class Settings:
def __init__(self):
print("Settings")
my_settings = Settings()
MainWindow.py
from PyQt5.QtWidgets import QMainWindow, QApplication
import sys
from Widget import Widget
from storage import my_settings
class MainWindow(QMainWindow):
def __init__(self,parent=None):
super(MainWindow, self).__init__(parent)
QMainWindow.__init__(self)
self.open_some_widget()
def open_some_widget(self):
widget = Widget()
widget.show()
widget.test()
self._widget = widget
my_settings.foo = 10
app = QApplication(sys.argv)
_mainWindow = MainWindow()
_mainWindow.show()
app.exec_()
Widget.py
from PyQt5.QtWidgets import QWidget
from storage import my_settings
class Widget(QWidget):
def test(self):
print(my_settings.foo)