读取 UI 文件并连接按钮、文本等元素
reading UI file and connecting elements such as buttons, text, etc
我正在考虑使用 PySide2,但读取 UI 文件,而不是通过 pyside2-uic 生成 Python。奇怪的是,我似乎找不到这种简单连接的例子。
我看到了 PyQt5 和 PySide2 的区别:
https://www.learnpyqt.com/blog/pyqt5-vs-pyside2/
但我不清楚在使用 PySide2 时如何连接按钮。
最简单的 window 代码在这里;我不能 quite 图是连接到在 UI 中创建的元素 (btnTest) 的位。我已经得到了这些东西来与 Qt 一起工作,但语法让我望而却步。一旦想通了,剩下的就应该接踵而至。
import sys
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import (QToolTip, QMessageBox, QPushButton, \
QApplication, QCheckBox, QDialog, QFileDialog, QGraphicsScene, QWidget, \
QLabel,QMainWindow, QDialogButtonBox)
'''
button hookup is here
'''
if __name__ == '__main__':
print("Program start.")
loader = QUiLoader()
app = QtWidgets.QApplication(sys.argv)
window = loader.load("test.ui", None)
window.show()
app.exec_()
按钮的 XML(.ui 文件):
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>210</width>
<height>117</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="btnTest">
<property name="geometry">
<rect>
<x>40</x>
<y>30</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>210</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
我见过这样的结构,但不确定ui我错过了什么;最初的答案让我继续前进,但我认为有一种更 pythonic 的做事方式。要清楚 - 以下 not 有效(给出的解决方案有效);我试图模仿如何设置转换后的 .uic 文件中的 .py 文件。
class Form(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.btnTest.clicked.connect(ProcessClick)
def ProcessClick(self):
print("hi")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Form()
loader = QUiLoader()
window = loader.load("test.ui", None)
window.show()
app.exec_()
根据 XML 按钮名称是 btnTest:
<widget class="QPushButton" name="btnTest">
因此您必须使用该名称来访问按钮:
import sys
from PySide2 import QtWidgets, QtUiTools
if __name__ == "__main__":
print("Program start.")
app = QtWidgets.QApplication(sys.argv)
loader = QtUiTools.QUiLoader()
window = loader.load("test.ui", None)
window.btnTest.clicked.connect(lambda: print("clicked"))
window.show()
sys.exit(app.exec_())
我正在考虑使用 PySide2,但读取 UI 文件,而不是通过 pyside2-uic 生成 Python。奇怪的是,我似乎找不到这种简单连接的例子。
我看到了 PyQt5 和 PySide2 的区别:
https://www.learnpyqt.com/blog/pyqt5-vs-pyside2/
但我不清楚在使用 PySide2 时如何连接按钮。
最简单的 window 代码在这里;我不能 quite 图是连接到在 UI 中创建的元素 (btnTest) 的位。我已经得到了这些东西来与 Qt 一起工作,但语法让我望而却步。一旦想通了,剩下的就应该接踵而至。
import sys
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import (QToolTip, QMessageBox, QPushButton, \
QApplication, QCheckBox, QDialog, QFileDialog, QGraphicsScene, QWidget, \
QLabel,QMainWindow, QDialogButtonBox)
'''
button hookup is here
'''
if __name__ == '__main__':
print("Program start.")
loader = QUiLoader()
app = QtWidgets.QApplication(sys.argv)
window = loader.load("test.ui", None)
window.show()
app.exec_()
按钮的 XML(.ui 文件):
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>210</width>
<height>117</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="btnTest">
<property name="geometry">
<rect>
<x>40</x>
<y>30</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>210</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
我见过这样的结构,但不确定ui我错过了什么;最初的答案让我继续前进,但我认为有一种更 pythonic 的做事方式。要清楚 - 以下 not 有效(给出的解决方案有效);我试图模仿如何设置转换后的 .uic 文件中的 .py 文件。
class Form(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.btnTest.clicked.connect(ProcessClick)
def ProcessClick(self):
print("hi")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Form()
loader = QUiLoader()
window = loader.load("test.ui", None)
window.show()
app.exec_()
根据 XML 按钮名称是 btnTest:
<widget class="QPushButton" name="btnTest">
因此您必须使用该名称来访问按钮:
import sys
from PySide2 import QtWidgets, QtUiTools
if __name__ == "__main__":
print("Program start.")
app = QtWidgets.QApplication(sys.argv)
loader = QtUiTools.QUiLoader()
window = loader.load("test.ui", None)
window.btnTest.clicked.connect(lambda: print("clicked"))
window.show()
sys.exit(app.exec_())