我想点击一个项目在一个QListView "widget_list_files“(这是一个文件路径到一个pdf),并更新QWebEngineView”视图“显示的pdf。如果我将所有内容都放在同一个app.py中,它就能正常工作,但是如果我将其移动到一个单独的文件中并导入该类,则QListView将被填充,但单击事件将被忽略。一个有趣的行为是,如果设置了一些断点并启动vscode调试,它也可以与导入O.o一起工作
app.py
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
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”视图“中。
发布于 2022-11-28 18:41:51
这是谢谢musicamante的解决方案。
更改app.py
# 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
# 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)https://stackoverflow.com/questions/74593737
复制相似问题