Форум сайта python.su
Всем привет. Столкнулся с неприятной штукой. Сейчас расскажу
# -*- coding: cp1251 -*-
from PyQt4 import QtGui, QtCore
import sys
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent):
QtGui.QMainWindow.__init__(self, parent)
# Создание виджетов
self.widget1 = QtGui.QWidget(self)
# Установка фонового цвета
self.widget1.setAutoFillBackground(True)
p1 = QtGui.QPalette()
p1.setColor(QtGui.QPalette.Background, QtCore.Qt.green)
self.widget1.setPalette(p1)
self.widget1.hide()
self.widget2 = QtGui.QWidget(self)
self.widget2.setAutoFillBackground(True)
p2 = QtGui.QPalette()
p2.setColor(QtGui.QPalette.Background, QtCore.Qt.black)
self.widget2.setPalette(p2)
self.widget2.hide()
# Тулбар
self.toolbar = QtGui.QToolBar(self)
self.actionW1 = QtGui.QAction(u'widget1', self)
QtCore.QObject.connect(self.actionW1, QtCore.SIGNAL("triggered()"), self.changeWidget)
self.actionW2 = QtGui.QAction(u'widget2', self)
QtCore.QObject.connect(self.actionW2, QtCore.SIGNAL("triggered()"), self.changeWidget)
self.toolbar.addAction(self.actionW1)
self.toolbar.addAction(self.actionW2)
self.addToolBar(self.toolbar)
def changeWidget(self):
sender = self.sender()
# Сначала скрываем оба виджета
for obj in [self.widget1, self.widget2]:
obj.hide()
if sender is self.actionW1:
self.setCentralWidget(self.widget1)
self.widget1.show()
elif sender is self.actionW2:
self.setCentralWidget(self.widget2)
self.widget2.show()
if __name__=='__main__':
app=QtGui.QApplication(sys.argv)
wg=MainWindow(None)
wg.show()
app.exec_()
Офлайн
Да как то странно тут все у тебя. Я бы на твоем месте виджеты положил на StackedWidget и просто переключал страницу.
Офлайн
nerijus, хм..действительно, как-то я об этом не подумал :) спасибо.
А все таки, по поводу ошибки, кто что может сказать? Так вообще делать можно? или setCentralWidget только один раз делается?
Офлайн
hellsladeв доках есть такая вешь:
nerijus, хм..действительно, как-то я об этом не подумал :) спасибо.
А все таки, по поводу ошибки, кто что может сказать? Так вообще делать можно? или setCentralWidget только один раз делается?
Note: QMainWindow takes ownership of the widget pointer and deletes it at the appropriate time.
Отредактировано (Июль 6, 2010 11:10:49)
Офлайн
apologize828, эм…ясно, спасибо
Офлайн