2016-11-24 73 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

香港專業教育學院發現,如果「孩子」控制器沒有給其父作爲初始化參數和設置child.setModal(「真」)

孩子會在默認情況下所期望的行爲,可以實現將其位置與其前身模式相匹配。