Python 当我按下另一个QWidget中的按钮时,我想在QPixmap中将路径设置为照片

Python 当我按下另一个QWidget中的按钮时,我想在QPixmap中将路径设置为照片,python,pyqt,pyqt5,qpixmap,Python,Pyqt,Pyqt5,Qpixmap,我正在开发一个基于QWidget的PyQt应用程序。我有两个QWidget类。当我按下ToolWindow类中的“选择”按钮时,我运行脚本并获得路径到照片,同时我切换到其他QWidget类。我想为QPixmap设置一个新路径,但我只在返回main并返回此窗口时才能获得它 class UIWindow(QWidget): def __init__(self, parent=None): super(UIWindow, self).__init__(parent)

我正在开发一个基于QWidget的PyQt应用程序。我有两个QWidget类。当我按下ToolWindow类中的“选择”按钮时,我运行脚本并获得路径到照片,同时我切换到其他QWidget类。我想为QPixmap设置一个新路径,但我只在返回main并返回此窗口时才能获得它

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)
这是我的UI窗口,其中有我想展示的照片

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()
开关功能


如何更新QPixmap,当我将path_重写为_photo时?

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

  • 不要滥用全局变量,在必要时使用它们,在这种情况下不是这样
  • 如果要在同一空间中显示多个小部件,请使用QStackedWidget
  • 每个类必须是独立的,因此它必须提供更新信息的方法,在本例中,它实现了一个允许更新QLabel显示的pixmap的方法
类UIWindow(QWidget): def uuu init uuu(self,parent=None): 超级(UIWindow,self)。\uuuuu init\uuuuuu(父级) self.tools\u btn=QPushButton(“文本”,self) self.label=QLabel(self) vbox=QVbox布局(自) vbox.addWidget(self.tools\u btn) vbox.addWidget(self.label) vbox.addStretch() def set_照片(自身,照片): pixmap=QPixmap(照片) self.label.setPixmap(pixmap) 类UIToolTab(QWidget): def uuu init uuu(self,parent=None): 超级(UIToolTab,self)。\uuuu初始化(父级) self.cps_btn=QPushButton(“选择”,self) vbox=QVbox布局(自) vbox.addWidget(self.cps\u btn) vbox.addStretch()
class主窗口(QMainWindow):
def uuu init uuu(self,parent=None):
超级(主窗口,自我)。\uuuuu初始化\uuuuuuu(父级)
self.stacked_widget=QStackedWidget()
self.setCentralWidget(self.stacked_小部件)
self.ui_tool=UIToolTab()
self.ui_window=UIWindow()
self.stacked\u widget.addWidget(self.ui\u工具)
self.stacked\u widget.addWidget(self.ui\u窗口)
self.ui\u tool.cps\u btn.clicked.connect(self.on\u choose\u clicked)
self.ui\u window.tools\u btn.clicked.connect(self.open\u tools\u window)
@pyqtSlot()
def on_选择_单击(自身):
dirname=QFileDialog.getExistingDirectory(self,“选择目录”)
如果指定名称:
路径=路径(dirname)
glob_path=path.glob(“*”)
路径到照片=brisquequality.答案(全局路径)
打印(路径到照片)
self.ui\u窗口。设置照片(路径到照片)
self.stacked_widget.setCurrentIndex(1)
@pyqtSlot()
def打开工具窗口(自):
self.stacked_widget.setCurrentIndex(0)

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

  • 不要滥用全局变量,在必要时使用它们,在这种情况下不是这样
  • 如果要在同一空间中显示多个小部件,请使用QStackedWidget
  • 每个类必须是独立的,因此它必须提供更新信息的方法,在本例中,它实现了一个允许更新QLabel显示的pixmap的方法
类UIWindow(QWidget): def uuu init uuu(self,parent=None): 超级(UIWindow,self)。\uuuuu init\uuuuuu(父级) self.tools\u btn=QPushButton(“文本”,self) self.label=QLabel(self) vbox=QVbox布局(自) vbox.addWidget(self.tools\u btn) vbox.addWidget(self.label) vbox.addStretch() def set_照片(自身,照片): pixmap=QPixmap(照片) self.label.setPixmap(pixmap) 类UIToolTab(QWidget): def uuu init uuu(self,parent=None): 超级(UIToolTab,self)。\uuuu初始化(父级) self.cps_btn=QPushButton(“选择”,self) vbox=QVbox布局(自) vbox.addWidget(self.cps\u btn) vbox.addStretch()
class主窗口(QMainWindow):
def uuu init uuu(self,parent=None):
超级(主窗口,自我)。\uuuuu初始化\uuuuuuu(父级)
self.stacked_widget=QStackedWidget()
self.setCentralWidget(self.stacked_小部件)
self.ui_tool=UIToolTab()
self.ui_window=UIWindow()
self.stacked\u widget.addWidget(self.ui\u工具)
self.stacked\u widget.addWidget(self.ui\u窗口)
self.ui\u tool.cps\u btn.clicked.connect(self.on\u choose\u clicked)
self.ui\u window.tools\u btn.clicked.connect(self.open\u tools\u window)
@pyqtSlot()
def on_选择_单击(自身):
dirname=QFileDialog.getExistingDirectory(self,“选择目录”)
如果指定名称:
路径=路径(dirname)
glob_path=path.glob(“*”)
路径到照片=brisquequality.答案(全局路径)
打印(路径到照片)
self.ui\u窗口。设置照片(路径到照片)
self.stacked_widget.setCurrentIndex(1)
@pyqtSlot()
def打开工具窗口(自):
self.stacked_widget.setCurrentIndex(0)

什么是路径(文件)?照片的绝对路径什么是路径(文件)?照片的绝对路径