【发布时间】:2011-12-24 23:35:45
【问题描述】:
在附加的示例脚本中,当我在第 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()
【问题讨论】:
-
您能否详细说明它无法正常显示的原因?
-
它根本不显示。当按下
Tab时,脚本将'hide'和'show'分别输出到控制台,因此快捷方式有效,但md.show()似乎没有任何效果。我在 Windows 和 OS X 上得到了相同的行为。有趣的是,删除self.setWindowFlags(Qt.FramelessWindowHint)行后,对话框将正确显示。