【问题标题】:I want to set path_to_photo in QPixmap, when i press the button in another QWidget当我按下另一个 QWidget 中的按钮时,我想在 QPixmap 中设置 path_to_photo
【发布时间】:2019-10-29 21:15:45
【问题描述】:

我正在使用基于 QWidget 的 PyQt 开发应用程序。我有 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?

【问题讨论】:

  • 什么是Path (file)
  • 照片的绝对路径

标签: python pyqt pyqt5 qpixmap


【解决方案1】:

解决方案考虑了以下几点:

  • 不要滥用全局变量,必要时使用它们,在这种情况下不是。
  • 如果您想在同一空间中显示多个小部件,请使用 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    相关资源
    最近更新 更多