python3.7+pyqt5:鼠标划过菜单栏时状态栏内容就会消失

幻_影 2019-08-05 10:20:11
各位达人,遇到一个奇怪的问题:python3.7+pyqt5,鼠标划过菜单栏时状态栏内容就会消失
见下图:


代码如下:
Qt Designer自动生成的代码:
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(600, 400)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/png/Resource/Python.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
MainWindow.setToolTipDuration(-1)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pb_open = QtWidgets.QPushButton(self.centralwidget)
self.pb_open.setGeometry(QtCore.QRect(180, 140, 81, 41))
self.pb_open.setObjectName("pb_open")
self.pb_close = QtWidgets.QPushButton(self.centralwidget)
self.pb_close.setGeometry(QtCore.QRect(310, 140, 81, 41))
self.pb_close.setObjectName("pb_close")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 600, 23))
self.menubar.setObjectName("menubar")
self.menu_F = QtWidgets.QMenu(self.menubar)
self.menu_F.setObjectName("menu_F")
self.menu_O = QtWidgets.QMenu(self.menubar)
self.menu_O.setObjectName("menu_O")
self.menu_A = QtWidgets.QMenu(self.menubar)
self.menu_A.setObjectName("menu_A")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.toolBar = QtWidgets.QToolBar(MainWindow)
self.toolBar.setObjectName("toolBar")
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
self.action_open = QtWidgets.QAction(MainWindow)
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(":/png/Resource/open.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.action_open.setIcon(icon1)
self.action_open.setObjectName("action_open")
self.action_about = QtWidgets.QAction(MainWindow)
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(":/png/Resource/about.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.action_about.setIcon(icon2)
self.action_about.setObjectName("action_about")
self.action_save = QtWidgets.QAction(MainWindow)
icon3 = QtGui.QIcon()
icon3.addPixmap(QtGui.QPixmap(":/png/Resource/save.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.action_save.setIcon(icon3)
self.action_save.setObjectName("action_save")
self.action_exit = QtWidgets.QAction(MainWindow)
icon4 = QtGui.QIcon()
icon4.addPixmap(QtGui.QPixmap(":/png/Resource/exit.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.action_exit.setIcon(icon4)
self.action_exit.setObjectName("action_exit")
self.action_option = QtWidgets.QAction(MainWindow)
icon5 = QtGui.QIcon()
icon5.addPixmap(QtGui.QPixmap(":/png/Resource/option.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.action_option.setIcon(icon5)
self.action_option.setObjectName("action_option")
self.menu_F.addAction(self.action_open)
self.menu_F.addAction(self.action_save)
self.menu_F.addSeparator()
self.menu_F.addAction(self.action_exit)
self.menu_O.addAction(self.action_option)
self.menu_A.addAction(self.action_about)
self.menubar.addAction(self.menu_F.menuAction())
self.menubar.addAction(self.menu_O.menuAction())
self.menubar.addAction(self.menu_A.menuAction())
self.toolBar.addAction(self.action_open)
self.toolBar.addAction(self.action_save)
self.toolBar.addSeparator()
self.toolBar.addAction(self.action_option)
self.toolBar.addAction(self.action_about)
self.toolBar.addSeparator()
self.toolBar.addAction(self.action_exit)

self.retranslateUi(MainWindow)
self.pb_close.clicked.connect(MainWindow.close)
self.action_exit.triggered.connect(MainWindow.close)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
MainWindow.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:10pt; color:#000000;\">这是一个 </span><a href=\"www.baidu.com\"><span style=\" font-size:10pt; font-weight:600; text-decoration: underline; color:#0000ff;\">气泡提示</span></a><span style=\" font-size:10pt; color:#000000;\">!</span></p></body></html>"))
self.pb_open.setText(_translate("MainWindow", "打开文件"))
self.pb_close.setText(_translate("MainWindow", "关闭窗口"))
self.menu_F.setTitle(_translate("MainWindow", "文件(&F)"))
self.menu_O.setTitle(_translate("MainWindow", "编辑(&E)"))
self.menu_A.setTitle(_translate("MainWindow", "帮助(&H)"))
self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
self.action_open.setText(_translate("MainWindow", "打开(&O)"))
self.action_open.setShortcut(_translate("MainWindow", "Ctrl+O"))
self.action_about.setText(_translate("MainWindow", "关于(&A)"))
self.action_about.setShortcut(_translate("MainWindow", "Ctrl+A"))
self.action_save.setText(_translate("MainWindow", "保存(&S)"))
self.action_save.setShortcut(_translate("MainWindow", "Ctrl+S"))
self.action_exit.setText(_translate("MainWindow", "退出(&X)"))
self.action_exit.setShortcut(_translate("MainWindow", "Ctrl+X"))
self.action_option.setText(_translate("MainWindow", "选项(&P)"))
self.action_option.setShortcut(_translate("MainWindow", "Ctrl+P"))

import Resource_rc


自己写的窗口类:
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QFileDialog
import MainWindowTemplate



class MyWindow(QtWidgets.QMainWindow, MainWindowTemplate.Ui_MainWindow):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.setupUi(self)
self.init_ui()

self.pb_open.clicked.connect(self.open_file)
self.action_open.triggered.connect(self.open_file)

def init_ui(self):
self.setWindowTitle('PyQt MainWindow 模板')
self.resize(600, 400)
self.move_center()
self.status = self.statusBar()
self.status.showMessage('这是状态栏。')

def move_center(self):
size_screen = QtWidgets.QDesktopWidget().screenGeometry()
size_window = self.geometry()
x = int((size_screen.width()-size_window.width())/2)
y = int((size_screen.height()-size_window.height())/2)
self.move(x, y)


def open_file(self):
file, ok = QFileDialog.getOpenFileName(self, '打开文件', 'J:\\', '所有文件(*.*);;文本文件(*.txt)')
if ok:
self.status.showMessage(file)


主函数:
import sys
from PyQt5 import QtWidgets
import MyWindow
import ctypes


def hide_window():
wnd_cmd = ctypes.windll.kernel32.GetConsoleWindow()
if wnd_cmd != 0:
ctypes.windll.user32.ShowWindow(wnd_cmd, 0)
ctypes.windll.kernel32.CloseHandle(wnd_cmd)


def main():
app = QtWidgets.QApplication(sys.argv)
window = MyWindow.MyWindow()
window.show()
sys.exit(app.exec_())


if __name__ == '__main__':
hide_window()
main()
...全文
870 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
原著名四哥 2021-11-08
  • 打赏
  • 举报
回复 1

用Qtimer实时激活并刷新状态栏

    timer = QtCore.QTimer(self)
    timer.timeout.connect(self.status_bar_show_msg)
    timer.start()

def status_bar_show_msg(self):
    self.statusbar.showMessage("实时显示状态栏。", 0)
DreamLife. 2021-06-30
  • 打赏
  • 举报
回复

今天我也遇到了,还没有找到对应方法

weixin_49587842 2021-05-04
  • 打赏
  • 举报
回复
我也想知道这个问题如恶化解决
hidegenius 2021-02-03
  • 打赏
  • 举报
回复
你好,我也遇到了同样的问题,请问解决了吗??
qq_31536139 2020-11-23
  • 打赏
  • 举报
回复
你好,我也遇到了同样的问题,请问解决了吗,我试了下使用QTimer方法可以让消息一直显示
幻_影 2019-08-06
  • 打赏
  • 举报
回复
引用 1 楼 一去丶二三里的回复:
showMessage() 有一个 timeout 参数,标识超时时间,当超过这个时长时,文本就会消失。 如果不设置 timeout,则会一直显示,除非主动调用 clearMessage()。
timeout参数未设,文本消失是因为鼠标划过了菜单栏,只要鼠标不划过菜单栏,等多久文本都不会消失。
fardeas 2022-04-14
精选
  • 举报
回复
@幻_影 找到原因了:“The status tip is displayed on all status bars provided by the action's top-level parent widget.By default, this property contains an empty string.”QAction的statusTip()默认是空字符串'',且会在QAction的父QWidget的所有状态栏显示。没有解决办法,我弃用MenuBar和QAction了,改用其他PushButton或者自定义QLabel实现菜单栏按钮组。
一去丶二三里 2019-08-06
  • 打赏
  • 举报
回复
showMessage() 有一个 timeout 参数,标识超时时间,当超过这个时长时,文本就会消失。 如果不设置 timeout,则会一直显示,除非主动调用 clearMessage()。

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧