首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyside6更新webview url只在app.py中工作,而不是作为导入类工作。

问pyside6更新webview url只在app.py中工作,而不是作为导入类工作。
EN

Stack Overflow用户
提问于 2022-11-27 20:56:17
回答 1查看 19关注 0票数 0

我想点击一个项目在一个QListView "widget_list_files“(这是一个文件路径到一个pdf),并更新QWebEngineView”视图“显示的pdf。如果我将所有内容都放在同一个app.py中,它就能正常工作,但是如果我将其移动到一个单独的文件中并导入该类,则QListView将被填充,但单击事件将被忽略。一个有趣的行为是,如果设置了一些断点并启动vscode调试,它也可以与导入O.o一起工作

app.py

代码语言:javascript
复制
from modm.functions.cms import cms

class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()

        self.file_path = '/home/user/Downloads'

        layout_cms = QHBoxLayout()

        # Files Layout
        layout_files = QVBoxLayout()

        layout_files_search = QHBoxLayout()

        search_input_text = QLineEdit()
        search_input_text.setMaxLength(10)
        search_input_text.setPlaceholderText("Enter your text")
        layout_files_search.addWidget(search_input_text)

        search_button_search = QPushButton("Search")
        layout_files_search.addWidget(search_button_search)

        self.widget_list_files = QListView()
        self.widget_list_files.clicked.connect(self.open_document)
        self.model_files = QFileSystemModel()
        self.model_files.setNameFilterDisables(False)
        self.model_files.setFilter(QDir.Files)
        self.model_files.setNameFilters(["*.pdf"])

        layout_files.addLayout(layout_files_search)
        layout_files.addWidget(self.widget_list_files)

        layout_cms.addLayout( layout_files,stretch=2)

        # Document Layout
        self.view = QWebEngineView()
        self.view.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True)
        self.view.settings().setAttribute(QWebEngineSettings.PdfViewerEnabled, True)
        layout_document = QVBoxLayout()
        layout_document.addWidget(self.view)

        # Document Layout -> buttons
        layout_document_buttons = QHBoxLayout()
        document_button_merge = QPushButton("Merge")
        layout_document_buttons.addWidget(document_button_merge)

        layout_document.addLayout(layout_document_buttons)
        layout_cms.addLayout(layout_document,stretch=3)

        self.model_files.setRootPath(self.file_path)
        self.widget_list_files.setModel(self.model_files)
        self.widget_list_files.setRootIndex(self.model_files.index(self.file_path))
        self.widget_cms = QWidget()
        self.widget_cms.setLayout(layout_cms)

        content_cms = cms()
        # Tab Menu
        tab_menu = QTabWidget()
        tab_menu.setTabPosition(QTabWidget.West)
        tab_menu.setMovable(True)
        # here I use the imported version
        tab_menu.addTab(content_cms.widget_cms, 'CMS')
        # here I use code from this file
        tab_menu.addTab(self.widget_cms, 'Merge')
        self.setCentralWidget(tab_menu)

    def open_document(self,index):
        self.view.setUrl(f"file://{self.model_files.filePath(index)}")
def run():
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()

    app.exec()

if __name__ == '__main__':
    run()

cms.py

代码语言:javascript
复制
class cms():

    def __init__(self):
        self.file_path = '/home/user/Downloads'

        layout_cms = QHBoxLayout()

        # Files Layout
        layout_files = QVBoxLayout()

        layout_files_search = QHBoxLayout()

        search_input_text = QLineEdit()
        search_input_text.setMaxLength(10)
        search_input_text.setPlaceholderText("Enter your text")
        layout_files_search.addWidget(search_input_text)

        search_button_search = QPushButton("Search")
        layout_files_search.addWidget(search_button_search)

        self.widget_list_files = QListView()
        self.widget_list_files.clicked.connect(self.open_document)
        self.model_files = QFileSystemModel()
        self.model_files.setNameFilterDisables(False)
        self.model_files.setFilter(QDir.Files)
        self.model_files.setNameFilters(["*.pdf"])

        layout_files.addLayout(layout_files_search)
        layout_files.addWidget(self.widget_list_files)

        layout_cms.addLayout( layout_files,stretch=2)

        # Document Layout
        self.view = QWebEngineView()
        self.view.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True)
        self.view.settings().setAttribute(QWebEngineSettings.PdfViewerEnabled, True)
        layout_document = QVBoxLayout()
        layout_document.addWidget(self.view)

        # Document Layout -> buttons
        layout_document_buttons = QHBoxLayout()
        document_button_merge = QPushButton("Merge")

        layout_document.addLayout(layout_document_buttons)
        layout_cms.addLayout(layout_document,stretch=3)

        self.model_files.setRootPath(self.file_path)
        self.widget_list_files.setModel(self.model_files)
        self.widget_list_files.setRootIndex(self.model_files.index(self.file_path))
        self.widget_cms = QWidget()
        self.widget_cms.setLayout(layout_cms)

    def open_document(self,index):
        # if I set the breakpointn in the line below and randomly somewhere in __init__ it also works in this version in debug mode
        self.view.setUrl(f"file://{self.model_files.filePath(index)}")

我将完全相同的代码从app.py移动到cms.py中,并敦促它像在app.py中那样工作,这意味着QListView "widget_list_files“中的一个项目的pdf文件将显示在QWebEngineView”视图“中。

EN

回答 1

Stack Overflow用户

发布于 2022-11-28 18:41:51

这是谢谢musicamante的解决方案。

更改app.py

代码语言:javascript
复制
# wrong and completely removed:
# content_cms = cms()
# Tab Menu
tab_menu = QTabWidget()
tab_menu.setTabPosition(QTabWidget.West)
tab_menu.setMovable(True)
# wrong:
# tab_menu.addTab(content_cms.widget_cms, 'CMS')
# right:
tab_menu.addTab(cms(), 'CMS')
self.setCentralWidget(tab_menu)

更改cms.py

代码语言:javascript
复制
# wrong:
#class cms():
# right: inherit QWidget
class cms(QWidget):

    def __init__(self):
        # init QWidget 
        super(cms, self).__init__()
        ...
        # wrong
        #self.widget_cms = QWidget()
        #self.widget_cms.setLayout(layout_cms)
        # right:
        self.setLayout(layout_cms)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74593737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档