Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 17, 2019 11:56:02

lefmails
Зарегистрирован: 2019-04-15
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрыть верхнюю часть в модальном окне

Всем привет!
Есть основная форма и основной класс

Есть некий родитель

 class MyModalWindow(QtGui.QWidget):
    def closeEvent(self, QMesBox):
        pass
В основном классе:
Вызывается:
 btn_modal_okn.clicked.connect(self.show_modal_window)

Само модальное окно
     def show_modal_window(self):
        window = MyModalWindow(process, QtCore.Qt.Dialog) # privyazivaem modal okno roditerlya
        window.setWindowModality(QtCore.Qt.WindowModal) # ApplicationModal blokiruet vse okna
        window.setWindowTitle("okno") # zagolovok okna
        window.setGeometry(140, 130, 240, 100)       
        window.show()

Ни как не могу убрать в модальном окне верхнюю часть (где свернуть, закрыть)
Пробовал как в главном окне
 self.setWindowFlags(QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowTitleHint)
Но не получилось.


Подскажите пожалуйста как убрать верхнюю часть с заголовком и разместить на форме кнопку закрыть, например как в главном окне
         quit = QtGui.QPushButton('Close', self)
        quit.setGeometry(10, 10, 60, 35)
        self.connect(quit, QtCore.SIGNAL('clicked()'),
            QtGui.qApp, QtCore.SLOT('quit()'))

Офлайн

#2 Апрель 18, 2019 11:16:09

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Скрыть верхнюю часть в модальном окне

lefmails
Есть некий родитель
родитель кого? если есть родитель, то где наследник?

lefmails
Пробовал как в главном окне

self.setWindowFlags(QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowTitleHint)

Но не получилось.
ну дык надо перечислять все флаги:
 self.setWindowFlags(QtCore.Qt.Dialog|QtCore.Qt.CustomizeWindowHint|QtCore.Qt.WindowTitleHint|QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowCloseButtonHint)
и тогад ваш класс должен выглядеть както так:
 import sys
from PyQt4 import QtGui, QtCore
class MyModalWindow(QtGui.QWidget):
    def __init__(self,parent, flag,  *args, **kwargs):
        super().__init__(parent, flag, *args, **kwargs)
        self.setWindowFlags(flag|QtCore.Qt.CustomizeWindowHint|QtCore.Qt.WindowTitleHint|QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowCloseButtonHint)
        self.setWindowModality(QtCore.Qt.WindowModal)
    def closeEvent(self, QMesBox):
        pass
class MainWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super().__init__( parent)
        self.btn = QtGui.QPushButton('click me', self)
        self.btn.clicked.connect(self.show_modal_window)
    def show_modal_window(self):
        window = MyModalWindow(self, QtCore.Qt.Dialog)
        window.setWindowTitle("okno")
        window.setGeometry(140, 130, 240, 100)
        window.show()
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

это если вы хотите изобретать свой велосипед, а можно вооспользовать уже готовым QMessageBox и тогда ваш show_modal_window() будет выглядеть вот так:
     def show_modal_window(self):
        msg = QtGui.QMessageBox()
        msg.setIcon(QtGui.QMessageBox.Information)
        msg.setStandardButtons(QtGui.QMessageBox.Close)
        msg.setText('Тут какоето сообщение')
        msg.setWindowFlags(QtCore.Qt.CustomizeWindowHint|QtCore.Qt.WindowTitleHint|QtCore.Qt.WindowCloseButtonHint)
        msg.exec()
но тут все зависит чего вы хотите…



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Апрель 18, 2019 11:53:49)

Офлайн

#3 Апрель 18, 2019 14:58:19

lefmails
Зарегистрирован: 2019-04-15
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрыть верхнюю часть в модальном окне

(QT4 Py2.7.15)
не получилось
ни в основно программе
Создал новую программу, вставил Ваш код и все равно ошибка:

   File "C:/gt/test/1/0tst.py", line 22, in <module>
    mw = MainWindow()
  File "C:/gt/test/1/0tst.py", line 12, in __init__
    super().__init__( parent)
TypeError: super() takes at least 1 argument (0 given)

А что такое super() ?
Это может от Python 3.* ?

Офлайн

#4 Апрель 18, 2019 15:17:51

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Скрыть верхнюю часть в модальном окне

lefmails
А что такое super()
точно, точно, у тебяж 2.7
замени в MyModalWindow
 super().__init__(parent, flag, *args, **kwargs)
на 
QtGui.QWidget.__init__(self, parent, flag, *args, **kwargs)
и в MainWindow
 super().__init__( parent)
на
QtGui.QWidget.__init__(self, parent)



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Апрель 18, 2019 15:18:35)

Офлайн

#5 Апрель 19, 2019 07:13:53

lefmails
Зарегистрирован: 2019-04-15
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрыть верхнюю часть в модальном окне

Спасибо!
А как в этом окно что то вывести (например глобальную переменную TEST и изменить ее?
Что то даже label_w не получается вывести и self.label_w и window.label_w Пробовал

     def show_modal_window(self):
        window = MyModalWindow(self, QtCore.Qt.Dialog)
        window.setWindowTitle("okno")
        window.setGeometry(140, 130, 240, 100)
        label_w = QtGui.QLabel('asd', self)
        label_w.setGeometry(10, 10, 60, 20)
        label_w.setStyleSheet(QString("font-size: %1px").arg(21))
        window.show()

Офлайн

#6 Апрель 19, 2019 09:52:18

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Скрыть верхнюю часть в модальном окне

lefmails
Что то даже label_w не получается вывести и self.label_w и window.label_w Пробовал
чтото вы неправильно пробовали, вам бы разобраться что такое переменная, что такое атрибут класса, а что такое метод, а то так и будете вслепую тыкаться. документацию почитать на PyQt/
вот вы пишете:
 label_w = QtGui.QLabel('asd', self)
что, по вашему, такое self которое вы передаете вторым аргументом? и с чего этот QLabel должен отображаться на вашем экземпляре MyModalWindow? Чтобы оно на нем отображалось его нужно туда поместить, указать родителем экземпляр MyModalWindow…

 import sys
from PyQt4 import QtGui, QtCore
class MyModalWindow(QtGui.QWidget):
    def __init__(self,parent, flag,  *args, text='', **kwargs):
        QtGui.QWidget.__init__(self, parent, flag, *args, **kwargs)
        self.setWindowFlags(flag|QtCore.Qt.CustomizeWindowHint|QtCore.Qt.WindowTitleHint|QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowCloseButtonHint)
        self.setWindowModality(QtCore.Qt.WindowModal)
        layout = QtGui.QVBoxLayout(self)
        layout.setAlignment(QtCore.Qt.AlignCenter)
        self.setLayout(layout)
        self.label_w = QtGui.QLabel(text, self)
        layout.addWidget(self.label_w)
    def set_text(self, text):
        self.label_w.setText(text)
    def closeEvent(self, QMesBox):
        pass
class MainWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.btn = QtGui.QPushButton('click me', self)
        self.btn.clicked.connect(self.show_modal_window)
    def show_modal_window(self):
        window = MyModalWindow(self, QtCore.Qt.Dialog)
        window.setWindowTitle("okno")
        window.setGeometry(140, 130, 240, 100)
        window.set_text('Какоето сообщение.')
        window.show()
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#7 Апрель 19, 2019 13:37:12

lefmails
Зарегистрирован: 2019-04-15
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрыть верхнюю часть в модальном окне

Да надо подтягивать теорию…

На строчку:

 def __init__(self,parent, flag,  *args, text='', **kwargs):
Выдал ошибку:
 There's an error in your programm invalid, syntx
Пробовал просто text и убирать, соответственно потом при клике на открытие окна ругался, что глобальное имя не найдено

Затем поставил перед созданием класса text='' (что б глобальная была) и все заработало

Спасибо!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version