Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQT: Запуск виджета из другого виджета [RSS Feed]

#1 Март 27, 2011 21:53:19

lich100
От:
Зарегистрирован: 2011-03-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT: Запуск виджета из другого виджета

Здравствуйте, форумчане. Хочу обратиться к вам с таким вопросом.
Занялся я написанием некоторой программы на PyQT, суть ее - имею главный виджет, висящий вверху экрана на нем кнопки.
http://radikal.ru/F/s46.radikal.ru/i112 … 2.jpg.html
По нажатию любой кнопки открывается ее новый виджет выводится на экран по центру экрана.
В принципе я уже немного разобрался , но не получается из главного виджета вызвать второй.
Все виджеты создаю через QT дизайнер и через uic привязываю к проекту. В общем как то так.
Пока при запуске программы показывается главный виджет и центрируется вверху экрана, дальше не осилил.
В общем подскажите как из одного виджета по нажатию кнопки вызвать другой, как их сконнектить (про connect знаю)?
Если возможно с примером. Заранее благодарен вам за помощь.



Офлайн

#2 Март 28, 2011 07:39:16

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT: Запуск виджета из другого виджета

from PyQt4 import Qt as qt
import sys

app = qt.QApplication(sys.argv)
mw = qt.QMainWindow()
fr = qt.QFrame()
fr.lt = qt.QVBoxLayout()
fr.btn = qt.QPushButton("Gimme a new window")
fr.setLayout(fr.lt)
fr.lt.addWidget(fr.btn)
mw.setCentralWidget(fr)

fr2 = qt.QFrame()
fr2.setWindowTitle("I am a new window")

def click(checked):
fr2.show()

fr.btn.clicked.connect(click)

mw.show()
app.exec_()



Офлайн

#3 Март 28, 2011 14:03:25

lich100
От:
Зарегистрирован: 2011-03-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT: Запуск виджета из другого виджета

Да этот вариант работает. А может вы могли бы помочь мне мой код исправить?
Содержимое файла TeacherApp.pyw:

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui # подключает основные модули PyQt
import mainform # подключает модуль описания формы
import runcommand # подключает модуль описания формы
import view # подключает модуль описания формы


def main():
app = QtGui.QApplication(sys.argv) # создаёт основной объект программы
form = mainform.MainForm() # создаёт объект главной формы
runform = runcommand.RunForm() # создаёт объект главной формы
viewform = view.ViewForm() # создаёт объект главной формы
screen = QtGui.QDesktopWidget().screenGeometry()
sizeform = form.geometry()
sizerunform = runform.geometry()
sizeviewform = viewform.geometry()
form.setGeometry(QtCore.QRect((screen.width()-sizeform.width())/2, 1, sizeform.width(), sizeform.height())) # по центру сверху
runform.setGeometry(QtCore.QRect((screen.width()-sizerunform.width())/2, sizeform.height(), sizerunform.width(), sizerunform.height()))
viewform.setGeometry(QtCore.QRect(screen.width()-screen.width(), sizeform.height(), screen.width(), screen.height()))
form.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.FramelessWindowHint)
runform.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.FramelessWindowHint)
viewform.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.FramelessWindowHint)
form.show() # даёт команду на отображение объекта формы и содержимого
app.exec() # запускает приложение


if __name__ == "__main__":
sys.exit(main())
Содержимое файла главной формы mainform.py:
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui, uic # подключает основные модули PyQt


# прототип главной формы
class MainForm(QtGui.QWidget):

# конструктор
def __init__(self):
super(MainForm, self).__init__()

# динамически загружает визуальное представление формы
uic.loadUi("mainform.ui", self)

self.connect(self.pushButton_12, QtCore.SIGNAL("clicked()"),
self.exitapp)

def exitapp(self):
QtGui.QApplication.exit()
Содержимое файла формы runcommand.py:
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui, uic # подключает основные модули PyQt


# прототип главной формы
class RunForm(QtGui.QWidget):

# конструктор
def __init__(self):
super(RunForm, self).__init__()

# динамически загружает визуальное представление формы
uic.loadUi("runcommand.ui", self)

#self.connect(self.pushButton_10, QtCore.SIGNAL("clicked()"),
#self.showruncommand)

#def showruncommand(self):
#runform.show()
Вот я не понимаю как в файле runcommand.py прописать чтобы при нажатии кнопки pushButton_10 на mainform открылась форма runcommand? Помогите исправить если не сложно. Может еще где ошибка?



Офлайн

#4 Март 28, 2011 19:07:57

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT: Запуск виджета из другого виджета

lich100
Вот я не понимаю как в файле runcommand.py прописать чтобы при нажатии кнопки pushButton_10 на mainform открылась форма runcommand? Помогите исправить если не сложно. Может еще где ошибка?
Если кнопка pushButton_10 у Вас в модуле mainform, то и обработчик ее нажатия надо описывать там же. Как-то так:
class MainForm(QtGui.QWidget):

# конструктор
def __init__(self):
super(MainForm, self).__init__()

# динамически загружает визуальное представление формы
uic.loadUi("mainform.ui", self)

self.connect(self.pushButton_12, QtCore.SIGNAL("clicked()"),
self.exitapp)

self.pushButton_10.clicked.connect(self.pushButton_10_click)

def pushButton_10_click(self, checked):
import runcommand
self.form = runcommand.RunForm()
self.from.show()



Офлайн

#5 Март 28, 2011 20:03:13

lich100
От:
Зарегистрирован: 2011-03-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT: Запуск виджета из другого виджета

В общем я переделал как вы сказали, окно при нажатии запускается и сразу закрывается, мелькает в общем, в чем может быть проблема?
Переделал mainform.py вот таким образом:

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui, uic # подключает основные модули PyQt
import mainform # подключает модуль описания формы
import runcommand # подключает модуль описания формы
import view # подключает модуль описания формы


# прототип главной формы
class MainForm(QtGui.QWidget):

# конструктор
def __init__(self):
super(MainForm, self).__init__()

# динамически загружает визуальное представление формы
uic.loadUi("mainform.ui", self)

self.connect(self.pushButton_12, QtCore.SIGNAL("clicked()"),
self.exitapp)

self.connect(self.pushButton_10, QtCore.SIGNAL("clicked()"),
self.showruncommand)

def showruncommand(self):
runform = runcommand.RunForm()
runform.show()

def exitapp(self):
QtGui.QApplication.exit()



Отредактировано (Март 28, 2011 20:04:38)

Офлайн

#6 Март 29, 2011 09:18:21

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQT: Запуск виджета из другого виджета

Офлайн

#7 Март 29, 2011 11:13:45

lich100
От:
Зарегистрирован: 2011-03-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT: Запуск виджета из другого виджета

apologize828
вам сюда
Спасибо конечно, но я ничего не понял( Можете на основе моего кода подсказать?



Отредактировано (Март 29, 2011 11:14:37)

Офлайн

#8 Март 29, 2011 13:58:51

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQT: Запуск виджета из другого виджета

lich100
apologize828
вам сюда
Спасибо конечно, но я ничего не понял( Можете на основе моего кода подсказать?
прочтите пост №11 в той ссылке что я вам дал, и поймете почему окно появляется и сразу исчезает и то как это исправить



Офлайн

#9 Март 29, 2011 14:31:24

lich100
От:
Зарегистрирован: 2011-03-27
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT: Запуск виджета из другого виджета

apologize828
lich100
apologize828
вам сюда
Спасибо конечно, но я ничего не понял( Можете на основе моего кода подсказать?
прочтите пост №11 в той ссылке что я вам дал, и поймете почему окно появляется и сразу исчезает и то как это исправить
Теперь понял, работает. Из-за этих self'ов я второй день уже сижу.



Офлайн

#10 Март 29, 2011 14:45:12

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQT: Запуск виджета из другого виджета

Да и по поводу коннекта, погляди на самый первый пост после твоего, коннект лучше делать так как там показали.



Офлайн

  • Начало
  • » GUI
  • » PyQT: Запуск виджета из другого виджета[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version