загружаю главное окно от УИ файла: main_1.pyresizeEvent не работает, если я использую QUiLoader для QMainWindow
from PySide import QtCore, QtGui, QtUiTools
import sys
class ControlMainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
loader = QtUiTools.QUiLoader()
file = QtCore.QFile("lat.ui")
file.open(QtCore.QFile.ReadOnly)
self.ui = loader.load(file)
file.close
def show(self):
self.ui.show()
def resizeEvent(self, event):
print event
app = QtGui.QApplication(sys.argv)
MW = ControlMainWindow()
MW.show()
sys.exit(app.exec_())
lat.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>708</width>
<height>488</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>310</x>
<y>170</y>
<width>56</width>
<height>13</height>
</rect>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>708</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
в этом случае resizeEvent не делает получить какие-либо события. Тем не менее, если я загрузить мой дизайн пользовательского интерфейса после PySide-UIC компиляции он работает хорошо main_2.py:
from PySide import QtCore, QtGui
import sys
import ui_lat
class ControlMainWindow(QtGui.QMainWindow, ui_lat.Ui_MainWindow):
def __init__(self, parent=None):
super(ControlMainWindow, self).__init__(parent)
self.setupUi(self)
def resizeEvent(self, event):
print event
app = QtGui.QApplication(sys.argv)
MW = ControlMainWindow()
MW.show()
sys.exit(app.exec_())
ui_lat.py
from PySide import QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(708, 488)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(310, 170, 56, 13))
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar()
self.menubar.setGeometry(QtCore.QRect(0, 0, 708, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("MainWindow", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))
Как я могу получить доступ к событиям главного окна (например, resizeEvent) первым способом?
Я не могу воспроизвести это. Хотя первый метод не создает ui правильно, события изменения размера _are_ печатаются, как ожидалось. – ekhumoro
Не могли бы вы разместить файл lat.ui? (или минималистический пример файла UI, который демонстрирует проблему). У вас есть QMainWindow, определенный в файле ui? –