1 Востаннє редагувалося Q-bart (27.04.2015 08:33:02)

Тема: Вікна в PyQt

Доброго дня!
Я почав вчити PyQt. І виникло таке питання - при натисканні кнопки, треба в вікні показати новий текст, кнопки, тощо. Формується сигнал:

QtCore.QObject.connect(button, QtCore.SIGNAL('clicked()'), starting)


starting - функція.
Так от, що має бути в тій функції?
Я зробив так:

def starting():
    newwindow = QtGui.QWidget()
    newwindow.setWindowTitle('New window')
    newwindow.resize(900, 600)
    newwindow.show()

Але тоді при натисканні кнопки вікно показується і відразу зникає...
Що робити?

2

Re: Вікна в PyQt

Я тільки хочу почати його вчити, але вже знайшов непоганий матеріал: http://wiki.python.su/Документации/ВведениеВСредуPyQt4
От тільки там інша версія...Можливо знадобиться...

Подякували: Q-bart1

3

Re: Вікна в PyQt

Не знаю QT, але теоретично змінна newwindow існує лише у функції starting, ф-ія виконує свою дію і все.

Подякували: Q-bart1

4

Re: Вікна в PyQt

show() не зупиняє основний потік, якщо там є вихід - то він буде виконаний (і вікно закриється). Спробуйте exec().
Читати далі

Подякували: Q-bart1

5

Re: Вікна в PyQt

koala написав:

show() не зупиняє основний потік, якщо там є вихід - то він буде виконаний (і вікно закриється). Спробуйте exec().
Читати далі

Так, забув додати exec().
Але воно працює не так, як мені треба. Я хочу щоб, при натисненні на кнопку оновлювався вміст вікна... Я думав, що треба створювати нове вікно, але здається це не так... А як тоді?

6

Re: Вікна в PyQt

Пане, як гадаєте, скільки на цьому форумі телепатів?

Подякували: A.N.Onim1

7

Re: Вікна в PyQt

Даю, вже даю код.

# -*- coding: utf-8 -*-

from PyQt4 import QtGui, QtCore
import sys
def starting():
    quest1 = QtGui.QWidget()
    quest1.setWindowTitle('Нове')
    quest1.resize(900, 600)
    quest1.show()
    quest1.exec()

    
testing = QtGui.QApplication(sys.argv)

window = QtGui.QWidget()
window.setWindowTitle('Title')
window.resize(900, 600)

MainText = QtGui.QLabel('<p align="center"; style="font-size: xx-large">Text</p>')
Mainbox = QtGui.QVBoxLayout()

# buttons
start = QtGui.QPushButton('Старт')
quit = QtGui.QPushButton('Вийти')
start.setFixedSize(70, 40)
quit.setFixedSize(70, 40)

buttons = QtGui.QHBoxLayout()
buttons.addWidget(start)
buttons.addWidget(quit)
# /buttons


Mainbox.addWidget(MainText)
Mainbox.addLayout(buttons)

window.setLayout(Mainbox)

QtCore.QObject.connect(quit, QtCore.SIGNAL('clicked()'), QtGui.qApp, QtCore.SLOT("quit()"))
QtCore.QObject.connect(start, QtCore.SIGNAL('clicked()'), starting)

window.show()
sys.exit(testing.exec_())

8

Re: Вікна в PyQt

Еврика!
Знайшов як додати нову кнопку.

def starting():
    buttonnew = QtGui.QPushButton('New buton')
    Mainbox.addWidget(buttonnew)

Але що робити, якщо я хочу повністю змінити вміст контейнера? Як видаляти певні кнопки чи надписи?

9

Re: Вікна в PyQt

Знайшов, як видалити певний елемент(кнопку, текст).

button.deleteLater()

А як повністю видалити контейнер з вікна, а замість нього додати інший?

10

Re: Вікна в PyQt

Не знаю нащо, я тут це пишу але може комусь буде потрібно.
Знайшов як видаляти контейнер(вірніше всі елементи з нього):

for i in reversed(range(layout.count())): 
        layout.itemAt(i).widget().setParent(None)