使用pyQt5自定义QPrintPreviewDialog

2024-09-28 22:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

基于Question with C++的答案,我尝试对PyQt5进行类似的操作。我想删除QPrintPreviewDialog的一些按钮并添加新按钮。我可以通过toolbar = dialog.findChildren(QToolBar)获取工具栏,通过buttons = dialog.findChildren(QToolButton)获取按钮,其中dialog = QPrintPreviewDialog(printer),然后我对按钮进行循环以检查其名称

代码被截断:

    dialog = QPrintPreviewDialog(printer)
    buttons = dialog.findChildren(QToolButton)
    actions = dialog.findChildren(QAction)
    toolbar = dialog.findChildren(QToolBar)
    toolbar[0].addAction("PDF", saveaspdf)           # This works fine to add a button
                                                     # and connection to saveaspdf()
    for button in buttons:
        print("entry:", button.objectName(), button.text())
        if button.text() == 'Portrait' or button.text() == 'Landscape':
            button.setDisabled(True)  # Button will be disabled
            button.setVisible(False)  # Button still visible, but disabled

     dialog.paintRequested.connect

我用toolbar.removeAction()尝试了一些东西,但没有找到确定所需操作的方法。我也不认为这是解决办法。另外,任何.removeWidget(button)都不能解决问题

请你从上面提到的C++页面解释一下这条线,给我一个PyQt的提示: //toolbarlist.first()->removeAction(toolbarlist.first()->actions().at(3));


Tags: totextactionsbutton按钮printerdialogtoolbar
1条回答
网友
1楼 · 发布于 2024-09-28 22:37:23

假设要删除PortraitLandscape按钮,则必须搜索QAction文本并将其从QToolBar中删除

toolbar = dialog.findChild(QToolBar)
ACTIONS_TEXT = [
    QCoreApplication.translate("QPrintPreviewDialog", text)
    for text in ("Portrait", "Landscape")
]
for action in toolbar.actions():
    if action.text() in ACTIONS_TEXT:
        toolbar.removeAction(action)

相关问题 更多 >