Я хочу щелкнуть по меню меню «Инструменты», чтобы полностью изменить содержимое окна. Как это сделать с PySide? Должен ли я вызвать QAction и установить новый виджет как центральный с родителем старого окна? Я тоже начинаю на питоне и на английском. Пока я создал только одно окно.Как изменить содержимое в окне в PySide?
1
A
ответ
2
Во-первых, я бы определил каждый инструмент в своем собственном подклассе QWidget
. Во-вторых, я бы добавил экземпляр каждого виджета инструмента, созданного таким образом, в макет центрального виджета главного окна. Наконец, я бы добавил действия в menuBar и подключил их к методам, чтобы показать и скрыть инструменты по своему желанию.
Ниже приведен пример, чтобы показать, как это может быть сделано с 2-мя различными инструментами:
from PySide import QtGui
import sys
class myApplication(QtGui.QMainWindow):
def __init__(self, parent=None):
super(myApplication, self).__init__(parent)
self.setWindowTitle('No Tool is Selected')
#---- create instance of each tool widget ----
self.tool1 = Tool1(self)
self.tool2 = Tool2(self)
#---- layout for central widget ----
centralWidget = QtGui.QWidget()
centralLayout = QtGui.QGridLayout()
centralLayout.addWidget(self.tool1, 0, 0)
centralLayout.addWidget(self.tool2, 1, 0)
centralWidget.setLayout(centralLayout)
self.setCentralWidget(centralWidget)
#---- set the menu bar ----
contentMenu = self.menuBar().addMenu(("Tools"))
contentMenu.addAction('show Tool 1', self.show_Tool1)
contentMenu.addAction('show Tool 2', self.show_Tool2)
contentMenu.addAction('show All', self.show_All)
def show_Tool1(self):
self.tool1.show()
self.tool2.hide()
self.setWindowTitle('Tool #1 is Selected')
def show_Tool2(self):
self.tool1.hide()
self.tool2.show()
self.setWindowTitle('Tool #2 is Selected')
def show_All(self):
self.tool1.show()
self.tool2.show()
self.setWindowTitle('All Tools are Selected')
class Tool1(QtGui.QWidget):
def __init__(self, parent=None):
super(Tool1, self).__init__(parent)
layout = QtGui.QGridLayout()
layout.addWidget(QtGui.QPushButton('Tool #1'))
self.setLayout(layout)
self.hide()
class Tool2(QtGui.QWidget):
def __init__(self, parent=None):
super(Tool2, self).__init__(parent)
layout = QtGui.QGridLayout()
layout.addWidget(QtGui.QTextEdit('Tool #2'))
self.setLayout(layout)
self.hide()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
instance = myApplication()
instance.show()
sys.exit(app.exec_())
Какие результаты в:
Смежные вопросы
- 1. Изменить содержимое в диалоговом окне
- 2. Изменить содержимое в диалоговом окне нажмите кнопку
- 3. PySide make QDialog появляется в главном окне
- 4. pyside изменить цвет QTreeWidgetItem
- 5. Лучший виджет Qt для использования в окне свойств ... в PySide?
- 6. Как изменить содержимое View.FindResults1 в Visual Studio?
- 7. Как показать содержимое print_r() в окне предупреждений?
- 8. изменить ярлык в пользовательском python pyside widget
- 9. Как изменить содержимое окна WPF в Runtime
- 10. не может прокручивать содержимое в главном окне
- 11. PySide QTabWidget изменить размер события
- 12. Вызов функции в главном окне из виджета (PySide)
- 13. Возвращает содержимое geometry() в виде списка в PySide
- 14. Как изменить форму курсора QPlainTextEdit (Pyqt, PySide)
- 15. WPF Зеркальное содержимое сетки в другом окне
- 16. Как переносить MultiCheckComboBox в PySide?
- 17. Изменить содержимое в UITextView
- 18. Matplotlib в Pyside с дизайнером Qt (PySide)
- 19. Изменить выбор в окне проводника?
- 20. Как изменить минимизацию поведения события в PyQt или PySide?
- 21. Как изменить размер и положение кнопок в PySide?
- 22. Содержимое, повторенное в модальном окне Joomla
- 23. Как программно изменить заголовок в окне wpf?
- 24. Как изменить размер содержимого в окне?
- 25. Как изменить изображение в окне MFC приложения
- 26. IntelliJ как изменить цвет в окне вывода
- 27. Как изменить JLabels в окне без ActionListener?
- 28. Как изменить ширину сетки в диалоговом окне
- 29. Как изменить значок в окне pygame?
- 30. Как изменить пространство в окне проекта?
Это прекрасно работает! Еще один вопрос: как заставить каждый инструмент иметь собственный заголовок окна. Я поместил 'self.setWindowTitle ("title")' в свой класс tool1 и tool2, но он не изменяется, когда инструмент выбран. –
@HrvojeT То, что вы сделали, оказало бы влияние, если бы ваши инструменты были показаны в автономном окне. В приведенном выше примере каждый инструмент принадлежит 'myApplication', поскольку они были добавлены к его компоновке. Поэтому вам нужно вместо этого изменить заголовок окна 'myApplication'. Это можно сделать в методах, вызванных действиями menuBar. Я обновил этот пример, чтобы показать вам это. –
@HrvojeT. Для упражнений удалите аргумент 'self' при создании экземпляра инструмента (например,' self.tool1 = Tool1() 'и прокомментируйте строки, в которые инструменты добавлены в макет' centralWidget' (например, ' centralLayout.addWidget (self.tool1, 0, 0) '). Теперь инструменты будут отображаться как автономное всплывающее окно при его выборе, а не отображаться в главном окне приложения, каждый со своим собственным независимым заголовком окна. –