gpt4 book ai didi

python - 当我按下另一个 QWidget 中的按钮时,我想在 QPixmap 中设置 path_to_photo

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:01 25 4
gpt4 key购买 nike

我正在使用 PyQt 开发一个基于 QWidget 的应用程序。我有 2 个 QWidget 类。当我从 ToolWindow 类中按“选择”按钮时,我运行脚本并获取 path_to_photo,我也切换到其他 QWidget 类。我想设置 QPixmap 的新路径,但只有当我回到主窗口并返回到此窗口时才得到它。

class UIWindow(QWidget):
def __init__(self, parent=None):
super(UIWindow, self).__init__(parent)
self.vbox = QVBoxLayout(self)
global path_to_photo
self.ToolsBTN = QPushButton('text', self)
self.label = QLabel(self)
self.pixmap = QPixmap(path_to_photo)
self.label.setPixmap(self.pixmap)
self.resize(self.pixmap.width(),self.pixmap.height())
self.vbox.addWidget(self.ToolsBTN)
self.vbox.addWidget(self.label)
self.vbox.addStretch(5)
self.setLayout(self.vbox)

这是我的 UIWindow,其中包含我想要显示的照片

class UIToolTab(QWidget):
def __init__(self, parent=None):
super(UIToolTab, self).__init__(parent)
self.vbox = QVBoxLayout(self)
self.CPSBTN = QPushButton("Choose", self)
self.vbox.addWidget(self.CPSBTN)
self.vbox.addStretch(5)
self.setLayout(self.vbox)

这是我的 UIToolTab,带有“选择”按钮

class MainWindow(QMainWindow):
...
def startUIToolTab(self):
self.ToolTab = UIToolTab(self)
self.Window = UIWindow(self)
self.setWindowTitle("UIToolTab")
self.setCentralWidget(self.ToolTab)
self.ToolTab.CPSBTN.clicked.connect(self.startUIWindow)
self.show()

def startUIWindow(self):
global path_to_photo
self.Window = UIWindow(self)
file = str(QFileDialog.getExistingDirectory(self, "Select Directory"))
print(file)
path = Path(file)
glob_path = path.glob('*')
path_to_photo = brisquequality.answer(glob_path)
self.setWindowTitle("UIWindow")
self.setCentralWidget(self.Window)
self.Window.ToolsBTN.clicked.connect(self.startUIToolTab)
self.show()

切换功能

当我重写path_to_photo时如何更新QPixmap?

最佳答案

该解决方案考虑了以下因素:

  • 不要滥用全局变量,在必要时使用它们,但在本例中则不需要。
  • 如果您想在同一空间中显示多个小部件,请使用 QStackedWidget。
  • 每个类必须是独立的,因此它必须提供更新信息的方法,在本例中,它实现了一个允许更新 QLabel 显示的像素图的方法。
class UIWindow(QWidget):
def __init__(self, parent=None):
super(UIWindow, self).__init__(parent)
self.tools_btn = QPushButton("text", self)
self.label = QLabel(self)

vbox = QVBoxLayout(self)
vbox.addWidget(self.tools_btn)
vbox.addWidget(self.label)
vbox.addStretch()

def set_photo(self, photo):
pixmap = QPixmap(photo)
self.label.setPixmap(pixmap)
class UIToolTab(QWidget):
def __init__(self, parent=None):
super(UIToolTab, self).__init__(parent)

self.cps_btn = QPushButton("Choose", self)

vbox = QVBoxLayout(self)
vbox.addWidget(self.cps_btn)
vbox.addStretch()
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)

self.stacked_widget = QStackedWidget()
self.setCentralWidget(self.stacked_widget)

self.ui_tool = UIToolTab()
self.ui_window = UIWindow()

self.stacked_widget.addWidget(self.ui_tool)
self.stacked_widget.addWidget(self.ui_window)

self.ui_tool.cps_btn.clicked.connect(self.on_choose_clicked)
self.ui_window.tools_btn.clicked.connect(self.open_tools_window)

@pyqtSlot()
def on_choose_clicked(self):
dirname = QFileDialog.getExistingDirectory(self, "Select Directory")
if dirname:
path = Path(dirname)
glob_path = path.glob("*")
path_to_photo = brisquequality.answer(glob_path)
print(path_to_photo)
self.ui_window.set_photo(path_to_photo)
self.stacked_widget.setCurrentIndex(1)

@pyqtSlot()
def open_tools_window(self):
self.stacked_widget.setCurrentIndex(0)

关于python - 当我按下另一个 QWidget 中的按钮时,我想在 QPixmap 中设置 path_to_photo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58615521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com