PySide使QDialog出现在主窗口中

时间:2016-03-31 17:40:07

标签: python qt pyqt pyside

我创建了一个应用程序,它有一个主窗口,可以打开一个对话框(问题,错误等)。我没有使用 public override void ViewDidLoad() { base.ViewDidLoad(); // Perform any additional setup after loading the view, typically from a nib. UIBarButtonItem backButton = new UIBarButtonItem("title", UIBarButtonItemStyle.Bordered, handleBack); this.NavigationItem.LeftBarButtonItem = backButton; } public void handleBack(object sender, EventArgs e) { Console.WriteLine("back!"); } QMessageBox.warning()等等,因为我想稍微自定义对话框。

但每次我打开一个新的Dialog,在Windows任务栏(我正在使用Windows 10)时,会打开一个新的“标签”,这有点烦人。

enter image description here

我的代码(缩短):

QMessageBox.question()

注意:通常,从菜单或按钮调用对话框。

问题:如何在不创建新的“任务栏标签”的情况下让对话框显示在主窗口中?

2 个答案:

答案 0 :(得分:1)

解决方案非常简单:将QMainWindow的引用传递给QDialog的构造函数将完成这项工作,例如:

class MessageBox(QtGui.QDialog):
    def __init__(self, parent, title, message, icon="info"):
        super(MessageBox, self).__init__(parent)
        ...

然后从继承自QMainWindow

的类调用该对话框
class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        #connect button with function, e.g.:
        mybutton.clicked.connect(self.open_dialog)

   def open_dialog(self):
       MessageBox(self)

也许这对任何人都有帮助!

答案 1 :(得分:0)

如果您将QDialog的父级设置为窗口,它将仅显示为任务栏上的一个项目。这通常是QMessageBox的第一个参数。

class MessageBox:
    def __init__(self, parent, title, message):
        msg = QtGui.QMessageBox(parent)

另外,如果你真的想要创建一个自定义对话框,你也可以只从QDialog创建子类。