在附带的示例脚本中,当我在第20行将MyDialog的父级设置为self而不是将其留空时,为什么MyDialog实例不能正确显示?首先,我认为捷径已经停止了工作,但显然事实并非如此。
在这种情况下,父设置是否设置并没有任何区别,但在我的实际情况下,我需要设置父设置。
我错过了一些明显的东西吗?
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class MyDialog(QDialog):
def __init__(self, parent=None):
QDialog.__init__(self, parent)
self.setWindowFlags(Qt.FramelessWindowHint)
self.setFocusPolicy(Qt.StrongFocus)
label = QLabel(self)
label.setText("World")
hbox = QHBoxLayout()
hbox.addWidget(label)
self.setLayout(hbox)
class MainWindow(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.my_dialog = MyDialog()
#self.my_dialog = MyDialog(self)
label = QLabel(self)
label.setText("Hello")
self.setCentralWidget(label)
shortcut = QShortcut(QKeySequence(Qt.Key_Tab), self, self.show_my_dialog)
shortcut.setContext(Qt.ApplicationShortcut)
self.show()
def show_my_dialog(self):
md = self.my_dialog
if md.isVisible():
md.hide()
print 'hide'
else:
md.show()
print 'show'
def main():
app = QApplication([])
main_window = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
答案 0 :(得分:2)
在我的机器上(Kubuntu 11.10),它正在工作。 如果Dialog的父级为None - 它会打开另一个无框窗口,并且我在任务栏中有两个条目。如果我关闭主窗口,则对话框仍然存在。
如果您使用的是Windows - 您描述的行为可能与之相关。也许窗口显示,它就在其他窗口后面?
如果Dialog的父级是主窗口 - 无框对话框显示在主窗口内 - 位于标签附近的左上角。
您可能对此info:
感兴趣对话窗口是一个主要用于短期任务的顶级窗口 并与用户进行简短的沟通。 QDialogs可能是模态的或 无模式。 QDialogs可以提供返回值,他们可以提供 默认按钮。 QDialogs也可以拥有QSizeGrip 右下角,使用setSizeGripEnabled()。
注意QDialog(一个 任何其他类型为Qt :: Dialog的小部件都使用父小部件 与Qt中的其他类略有不同。对话框始终是一个 顶级窗口小部件,但如果它有父窗口,则其默认位置为 以父级的顶级窗口小部件为中心(如果不是 顶级本身)。它还将共享父级的任务栏条目。
使用 更改QWidget :: setParent()函数的重载 QDialog小部件的所有权。此功能允许您明确 设置重新定位的小部件的窗口标志;使用重载 function将清除指定窗口系统的窗口标志 窗口小部件的属性(特别是它将重置Qt :: Dialog 标志)。