PyQt5 QInputDialog没有显示

时间:2017-04-27 19:07:51

标签: python pyqt pyqt5

我正在玩扩展QInputDialog,我想在用户按下某个快捷方式时打开它。我可以看到快捷方式运行并且代码在 ChartJsProvider.setOptions({ tooltips: { enabled: true, //mode: 'single', callbacks: { label: function (tooltipItem, data) { const tooltip = data.datasets[tooltipItem.datasetIndex]; const value = tooltip.data[tooltipItem.index]; return value === 0 ? null : tooltip.label + ': ' + value; } } } }); 方法之后正确运行,但QInputDialog从未显示。

只有当我尝试通过快捷方式打开QInputDialog时才会发生这种情况,如果我只是将QInputDialog放在我的main方法中,它运行正常。

show()

当我把它放在我的主函数

中时,这是有效的
class CommandPopup(QInputDialog):
""" popup for a single-line command to be entered"""
def __init__(self):
    super().__init__()
    self.setupGUI()
    self.command_runner = commands.CommandRunner()

def setupGUI(self):
    self.setLabelText("Command:")
    self.show()

def done(self, result):
    super().done(result)
    print("done")
    if result == 1:
        print(self.textValue())
        self.command_runner.run(self.textValue())

但是当我尝试从快捷方式上的另一个函数调用代码时,它不会显示输入对话框。

if __name__ == '__main__':
app = QApplication(sys.argv)
ui = CommandPopup()
sys.exit(app.exec_())

with:

         self.textArea.shortcut = QShortcut(QKeySequence("CTRL+E"),self)
         self.textArea.shortcut.activated.connect(self.command_popup)

(SO搞砸了一些缩进,但缩进是正确的,如果我在 def command_popup(self): x = CommandPopup() 方法之后打印出来,我可以看到字符串输出。

1 个答案:

答案 0 :(得分:1)

您必须将parent传递给该对象。为此,我们必须通过添加该参数来修改构造函数。

class CommandPopup(QInputDialog):
    """ popup for a single-line command to be entered"""
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        [...]
def command_popup(self):
    print("print")
    command = CommandPopup(self)