Найти - Пользователи
Полная версия: PyQT: Запуск виджета из другого виджета
Начало » GUI » PyQT: Запуск виджета из другого виджета
1
lich100
Здравствуйте, форумчане. Хочу обратиться к вам с таким вопросом.
Занялся я написанием некоторой программы на PyQT, суть ее - имею главный виджет, висящий вверху экрана на нем кнопки.
http://radikal.ru/F/s46.radikal.ru/i112 … 2.jpg.html
По нажатию любой кнопки открывается ее новый виджет выводится на экран по центру экрана.
В принципе я уже немного разобрался , но не получается из главного виджета вызвать второй.
Все виджеты создаю через QT дизайнер и через uic привязываю к проекту. В общем как то так.
Пока при запуске программы показывается главный виджет и центрируется вверху экрана, дальше не осилил.
В общем подскажите как из одного виджета по нажатию кнопки вызвать другой, как их сконнектить (про connect знаю)?
Если возможно с примером. Заранее благодарен вам за помощь.
Studentik
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_()
lich100
Да этот вариант работает. А может вы могли бы помочь мне мой код исправить?
Содержимое файла 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? Помогите исправить если не сложно. Может еще где ошибка?
Studentik
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()
lich100
В общем я переделал как вы сказали, окно при нажатии запускается и сразу закрывается, мелькает в общем, в чем может быть проблема?
Переделал 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()
apologize828
вам сюда
lich100
apologize828
вам сюда
Спасибо конечно, но я ничего не понял( Можете на основе моего кода подсказать?
apologize828
lich100
apologize828
вам сюда
Спасибо конечно, но я ничего не понял( Можете на основе моего кода подсказать?
прочтите пост №11 в той ссылке что я вам дал, и поймете почему окно появляется и сразу исчезает и то как это исправить
lich100
apologize828
lich100
apologize828
вам сюда
Спасибо конечно, но я ничего не понял( Можете на основе моего кода подсказать?
прочтите пост №11 в той ссылке что я вам дал, и поймете почему окно появляется и сразу исчезает и то как это исправить
Теперь понял, работает. Из-за этих self'ов я второй день уже сижу.
apologize828
Да и по поводу коннекта, погляди на самый первый пост после твоего, коннект лучше делать так как там показали.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB