【问题标题】:How to make a floating window when I press the user button in pyqt5?当我在pyqt5中按下用户按钮时如何制作浮动窗口?
【发布时间】:2022-01-22 06:13:08
【问题描述】:

我是 pyqt5 世界的新手,我使用以下代码创建了一个窗口:

class Ui_menu(QtWidgets.QMainWindow):
    def __init__(self):
        super(Ui_menu, self).__init__() # Call the inherited classes __init__ method
        uic.loadUi('Windows/menu.ui', self) # Load the .ui file
        self.show()

    app = QtWidgets.QApplication(sys.argv)
    window = Ui_menu()
    app.exec_()

我想知道您是否可以在单击顶部的按钮并打开一个浮动窗口(如附图所示)时创建动画。

【问题讨论】:

  • 您的问题是关于创建“浮动窗口”(从您的图像来看,它似乎是一个上下文菜单),还是关于显示它的动画?请尽量让您的问题更清楚,并阅读How to Askthe checklist
  • 是的,你说得对,我是接口的新手,但我不知道每个对象的所有技术术语。但是如果我认为是当您单击按钮时,会向下显示配置文件、配置等的窗口。但我已经意识到他们称之为上下文菜单。
  • 我建议你看看generic user interface elementscommon generic widgets,因为如果你想处理UI开发,他们的知识是强制性的,然后在Qt widgets了解他们的实现。

标签: python json pyqt5 python-3.8


【解决方案1】:

看看这段代码

from PyQt5.QtWidgets import *
from PyQt5.QtCore import QSize, QPoint, Qt
from PyQt5.QtGui import QIcon



class MyProxyStyle(QProxyStyle):
    pass
    def pixelMetric(self, QStyle_PixelMetric, option=None, widget=None):

        if QStyle_PixelMetric == QStyle.PM_SmallIconSize:
            return 100
        else:
            return QProxyStyle.pixelMetric(self, QStyle_PixelMetric, option, widget)



class main(QMainWindow):
    def __init__(self):
        super().__init__()

        self.central = QWidget()

        self.toolbar = toolbar()

        self.button1 = toolbutton("your_icon")
        self.button2 = toolbutton("your_icon")
        
        self.toolbar.addWidget(self.button1)          
        self.toolbar.addWidget(self.button2)

        self.button1.clicked.connect(lambda: self.open_menu(self.button1))
        self.button2.clicked.connect(lambda: self.open_menu(self.button2))
        
        self.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.toolbar)

        self.setCentralWidget(self.central)
        self.resize(600,400)
        self.show()

    
    def open_menu(self, obj):
        self.menu = QMenu()
        self.menu.setStyle(MyProxyStyle())

        self.menu.addAction(QIcon("your_icon"), "Person")
        self.menu.addMenu("Configuration")
        self.menu.addSeparator()
        self.menu.addMenu("Profile")

        pos = self.mapToGlobal(QPoint(obj.x(), obj.y()+obj.height()))

        self.menu.exec(pos)



class toolbar(QToolBar):
    def __init__(self):
        super().__init__()

        self.setIconSize(QSize(80,80))
        self.setMinimumHeight(80)
        self.setMovable(False)



class toolbutton(QToolButton):
    def __init__(self, icon):
        super().__init__()

        self.setIcon(QIcon(icon))
        self.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)



app = QApplication([])
window = main()
app.exec()

【讨论】:

  • 如果这是我要找的,我只需要设置上下文菜单的样式,非常感谢!!
猜你喜欢
  • 2022-11-04
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多