使用 PySide 将信号连接到目录树中的插槽
Connecting signals to slots up the directory tree with PySide
我正在尝试尽可能地将 UI 组件与功能代码分开,所以我的 PySide 应用程序结构如下
main.py
package\
app.py
__init__.py
ui\
mainwindow.py
__init__.py
Main 只是一个简单的启动器
if __name__ == '__main__':
import sys
from package import app
sys.exit(app.run())
应用程序是所有功能应驻留的地方。我从 app.py
开始 UI
from PySide import QtCore, QtGui
@QtCore.Slot()
def start_button_clicked():
print "started"
def run():
import sys
from ui.mainwindow import Ui_MainWindow
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
现在,我想从用户界面将发出的信号连接到 app.py,以避免有很多功能使主窗口文件混乱,但 UI 文件不知道app.py。我应该怎么做才能避免所有插槽都在 mainwindow.py 中? app.py 应该可以很容易地在 UI 上做一些事情,因为它有一个对象引用,但我对其他方式一无所知。
从 Qt Designer 为顶级小部件创建子类。使用这种方法,Qt Designer 中的所有子部件都将成为子类的属性:
import sys
from PySide import QtCore, QtGui
from ui.mainwindow import Ui_MainWindow
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.start_button.clicked.connect(self.start_button_clicked)
def start_button_clicked(self):
print "started"
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
我正在尝试尽可能地将 UI 组件与功能代码分开,所以我的 PySide 应用程序结构如下
main.py
package\
app.py
__init__.py
ui\
mainwindow.py
__init__.py
Main 只是一个简单的启动器
if __name__ == '__main__':
import sys
from package import app
sys.exit(app.run())
应用程序是所有功能应驻留的地方。我从 app.py
开始 UIfrom PySide import QtCore, QtGui
@QtCore.Slot()
def start_button_clicked():
print "started"
def run():
import sys
from ui.mainwindow import Ui_MainWindow
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
现在,我想从用户界面将发出的信号连接到 app.py,以避免有很多功能使主窗口文件混乱,但 UI 文件不知道app.py。我应该怎么做才能避免所有插槽都在 mainwindow.py 中? app.py 应该可以很容易地在 UI 上做一些事情,因为它有一个对象引用,但我对其他方式一无所知。
从 Qt Designer 为顶级小部件创建子类。使用这种方法,Qt Designer 中的所有子部件都将成为子类的属性:
import sys
from PySide import QtCore, QtGui
from ui.mainwindow import Ui_MainWindow
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.start_button.clicked.connect(self.start_button_clicked)
def start_button_clicked(self):
print "started"
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())