2016-11-24 3 views
0

По существу, я пытаюсь настроить UiDialogue, который создается и отображается при нажатии кнопки в его родительском Ui.PyQt/PySide, отображающий дочерний диалог с Qt.FramelessWindowHint

Я хочу, чтобы родительский диалог был бескаркасным (который работает и отображается так, как ожидалось), однако дочерний диалог будет показывать, только если он сделан с фреймом.

Если прокомментированная строка в строке 24 раскоментирована, окно не отображается, но приложение не сигнализирует о какой-либо ошибке. Может ли кто-нибудь сказать мне, почему? Ниже приведена урезанная версия кода, любая помощь будет высоко оценена.

Спасибо.

import sys 
from PySide.QtCore import * 
from PySide.QtGui import * 

class Ui_box(object): 
    def setupUi(self, box): 
     box.setObjectName("box") 
     self.setWindowFlags(Qt.FramelessWindowHint); 
     box.resize(749, 344) 
     self.p_b = QPushButton(box) 
     self.p_b.setGeometry(QRect(241, 140, 141, 91)) 
     self.p_b.show() 

     self.retranslateUi(box) 
     QMetaObject.connectSlotsByName(box) 

    def retranslateUi(self, box): 
     box.setWindowTitle(QApplication.translate("WelcomeUI", "Tasker", None, QApplication.UnicodeUTF8)) 


class Ui_Innerbox(object): 
    def setupUi(self, Innerbox): 
     Innerbox.setObjectName("Innerbox") 
     #self.setWindowFlags(Qt.FramelessWindowHint); 
     Innerbox.resize(745, 340) 
     self.label = QLabel(Innerbox) 
     self.label.setText("this is me") 
     self.label.setGeometry(QRect(239, 140, 141, 91)) 
     self.label.show() 


     self.retranslateUi(Innerbox) 
     QMetaObject.connectSlotsByName(Innerbox) 

    def retranslateUi(self, Innerbox): 
     Innerbox.setWindowTitle(QApplication.translate("WelcomeUI", "Tasker", None, QApplication.UnicodeUTF8)) 



class InnerBox(QDialog, Ui_Innerbox): 

    def __init__(self, parent=None): 
     QDialog.__init__(self, parent) 
     self.setupUi(self) 




class Box(QDialog, Ui_box): 

    def __init__(self, parent=None): 
     QDialog.__init__(self, parent) 
     self.setupUi(self) 
     self.show() 
     self.p_b.clicked.connect(self.pressed_button) 

    def pressed_button(self): 

     self.Innerb = InnerBox(self) 
     self.hide() 
     self.Innerb.show() 



if __name__ == '__main__': 
    app = QApplication(sys.argv); 

    newb = Box() 
    print("made") 
    app.exec_() 

ответ

1

Ive установлено, что желаемое поведение может быть достигнуто, если «ребенок» контроллер не дал своего родителя в качестве аргумента инициализации и настройки child.setModal («истина»)

ребенок будет по умолчанию установите его позицию в соответствии с его модальным предшественником.

Смежные вопросы