Найти - Пользователи
Полная версия: Скрыть верхнюю часть в модальном окне
Начало » Python для новичков » Скрыть верхнюю часть в модальном окне
1
lefmails
Всем привет!
Есть основная форма и основной класс

Есть некий родитель
 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()'))

PEHDOM
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()
но тут все зависит чего вы хотите…
lefmails
(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.* ?
PEHDOM
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)
lefmails
Спасибо!
А как в этом окно что то вывести (например глобальную переменную 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()
PEHDOM
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_())
lefmails
Да надо подтягивать теорию…

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

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

Спасибо!
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