【发布时间】:2021-07-20 03:02:45
【问题描述】:
编辑:更改标题,解决了一些代码错误(现在可以正常工作)
我正在尝试制作的 GUI 将是一个简单的 QTabWidget,将用户直接引导到一个标签页的末尾。
目前,我有三个 *.py 文件 - main.py、tab1.py、tab2.py。在 main.py 中是应用程序的主窗口和运行应用程序的功能(简化只是为了关注我的问题):
import sys
import tab1
import tab2
import PyQt5.QtWidgets as qtw
def main():
app = qtw.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
class MainWindow(qtw.QmainWindow):
def __init__(self):
super().__init__()
self.tabwidget = qtw.QTabWidget()
self.setCentralWidget(self.tabwidget)
self.tab1 = tab1.Tab_1()
self.tab2 = tab2.Tab_2()
# This is how I now passing the information from tab1 to tab2
self.tab1.path_line.textChanged.connect(self.tab2.path_widget.setText)
self.tabwidget.addTab(self.tab1, 'tab1')
self.tabwidget.addTab(self.tab2, 'tab2')
if __name__ == '__main__':
main()
在 tab1.py 中为 tabwidget 定义了一个类,它将用作输入数据选项卡。有一个按钮可以打开文件对话框,读取文件名,并将路径写入 QLineEdit 小部件:
import PyQt5.QtWidgets as qtw
class Tab_1(qtw.QWidget):
def __init__(self):
super().__init__()
self.path_line = qtw.QLineEdit()
self.but = qtw.QPushButton('Open')
self.but.clicked.connect(self.openfile)
layout_1 = qtw.QVBoxLayout()
layout_1.addWidget(self.but)
self.setLayout(layout_1)
def openfile(self):
filename, _ = qtw.QFileDialog.getOpenFileName(self, 'Title', 'File types')
if filename:
self.path_line.setText(filename)
else:
self.path_line.setText('No file was selected!')
现在我想在另一个文件 tab2.py 中使用我从 qtw.OpenFileDialog 获得的路径。所以定义的类 Tab_2() 看起来像这样:
import PyQt5.QtWidgets as qtw
class Tab_2(qtw.QWidget):
def __init__(self):
super().__init__()
# Retrieving the information by QLabel widget
self.path_widget = qtw.QLabel()
# Transform the information into string variable
self.path_string = self.path_widget.text()
layout_2 = qtw.QVBoxLayout()
layout_2.addWidget(self.path_widget) # The path from QFileDialog (Tab1) should appered on Tab2
self.setLayout(layout_2)
我的问题是,这是正确的做法吗?我应该使用 MainWindow 类作为此类信息的“获取者”和“传递者”,还是应该在选项卡类本身中实现?它有效,但我不想学习做坏事并最终习惯它。我在某种程度上了解类及其继承(很多狗类或员工类的例子,我了解它是如何工作的,但就我而言,我很困惑。)。结合GUI,它搞砸了我的脑袋。此外,我希望将每个选项卡作为单独的类放在单独的 *.py 文件中,以便将来添加另一个选项卡更加清晰和容易。我明白了,这可能不是使用类的正确方法,但每个选项卡都会有不同的布局。
【问题讨论】:
-
这个问题很适合Code Review
-
我什至不知道。我会在那里尝试,谢谢。