PyQt4 - открытие второго окна при выборе элемента меню + открытие диалога
Primary tabs
коренная тема находится здесь
декоратор = http://fkn.ktu10.com/?q=node/2871
# -*- coding: utf-8 -*-
# в предыдущем комментарии мы сообщили среде
# разработки в какой именно кодировке
# сохранён файл - и просим открыть
# его в соответсвии с правилаами этой кодировки
import sys
from PyQt4.QtGui import *
from PyQt4 import QtGui
# следующее - импортируется для работы со слотами
from PyQt4.QtCore import QObject, pyqtSlot
# Описываем дополнительное окно
class NewWindow(QtGui.QMainWindow):
def __init__(self):
super(NewWindow, self).__init__()
# запускаем метод рисующий виджеты окна
self.initUI()
# пусть по умолчанию строка
# будет пустой
# в этой строке мы можем передать путь
# к папке полученноый из диалога выбора директории
def initUI(self,str=""):
# описываем действие ("действие" - это понятие из QT -см. ссылки выше листинга)
exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), '&Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Выйти изприложения')
exitAction.triggered.connect(QtGui.qApp.quit)
self.statusBar()
#создаём статус бар для окна
menubar = self.menuBar()
# добавляем меню "Файл" на форму
fileMenu = menubar.addMenu('&File')
# добавляем действие ВЫХОД
# которое становится элементов подменю
fileMenu.addAction(exitAction)
# задаём положение окна и его размер
self.setGeometry(500, 500, 400, 200)
# указываем заголовок
if str: #если параметр передан
edit = QtGui.QLineEdit(str, self)
edit.setDragEnabled(True)
edit.move(100, 100)
self.setWindowTitle('Дополнительное окно')
self.show()
class NewWindow2(QtGui.QMainWindow):
def __init__(self,str):
super(NewWindow2, self).__init__()
# запускаем метод рисующий виджеты окна
self.initUI(str)
# пусть по умолчанию строка
# будет пустой
# в этой строке мы можем передать путь
# к папке полученноый из диалога выбора директории
def initUI(self,str=""):
# описываем действие ("действие" - это понятие из QT -см. ссылки выше листинга)
exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), '&Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Выйти изприложения')
exitAction.triggered.connect(QtGui.qApp.quit)
self.statusBar()
#создаём статус бар для окна
menubar = self.menuBar()
# добавляем меню "Файл" на форму
fileMenu = menubar.addMenu('&File')
# добавляем действие ВЫХОД
# которое становится элементов подменю
fileMenu.addAction(exitAction)
# задаём положение окна и его размер
self.setGeometry(500, 500, 400, 200)
# указываем заголовок
if str: #если параметр передан
edit = QtGui.QLineEdit(str, self)
edit.setDragEnabled(True)
edit.move(100, 100)
self.setWindowTitle('Дополнительное окно')
self.show()
# описание класса главного окна
class Example(QtGui.QMainWindow):
#---опишем свойство класса на Python--------------
### это свойсто вы испоьлзуем для того,
##чтобы дополнительное окно не сразу исчезало,
##а оставалось в памяти - и ,соответсвенно,
##на экране
def getx(self): return self.__addwin # методы для чтения,
def setx(self, value): self.__addwin = value # записи
def delx(self): del self.__addwin # удаления свойства
addwin = property(getx, setx, delx, "Свойство 'addwin'.") # определение свойства
#---конец описания свойства
def getx(self): return self.__addwin2 # методы для чтения,
def setx(self, value): self.__addwin2 = value # записи
def delx(self): del self.__addwin2 # удаления свойства
addwin2 = property(getx, setx, delx, "Свойство 'addwin2'.") # определение свойства
#---конец описания свойства
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
# описываем действие ("действие" - это понятие из QT -см. ссылки выше листинга)
exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), '&Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Выйти из приложения')
#действие открытия нового окна
newWindowAction = QtGui.QAction(QtGui.QIcon('exit.png'), '&NewWindow', self)
newWindowAction.setShortcut('Ctrl+P')
newWindowAction.setStatusTip('Открыть дополнительное окно')
#действие для диалога выбора директории
FolderChooser = QtGui.QAction(QtGui.QIcon('exit.png'), '&Choose Folder', self)
FolderChooser .setShortcut('Ctrl+D')
FolderChooser .setStatusTip('Открыть диалог выбора диретории')
# пример подключения слота к действию (сигналу)
#
exitAction.triggered.connect(QtGui.qApp.quit)
newWindowAction.triggered.connect(self.addwindow)
FolderChooser.triggered.connect(self.showDialog)
self.statusBar()
#создаём статус бар для окна
menubar = self.menuBar()
# добавляем меню "Файл" на форму
fileMenu = menubar.addMenu('&File')
# подключаем действия как элементы полменю
fileMenu.addAction(FolderChooser)
fileMenu.addAction(newWindowAction)
fileMenu.addAction(exitAction)
# задаём положение окна
self.setGeometry(300, 300, 300, 200)
# указываем заголовок
self.setWindowTitle('Демонстрация главное меню')
self.show()
# с помощью декоратора указываем, что данный метод
# является слотом
@pyqtSlot()
def addwindow(self):
#""" C++: void foo() """
self.addwin = NewWindow()
# ОПИСАНИЕ ДИАЛОГА ВЫБОРА ДИРЕКТОРИИ
@pyqtSlot()
def showDialog(self):
file = QFileDialog.getExistingDirectory(self, "Select Directory",'/home')
self.addwin2 = NewWindow2(file)
# определяем функцию main() (вход в программу)
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
# составляем указание интерпретатору
# какую именно функцию запускать
# в случае если нас скрипт запущен непосредственно
if __name__ == '__main__':
main()
- Log in to post comments
- 10088 reads