首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使PySide窗口在所有其他窗口之上弹出

如何使PySide窗口在所有其他窗口之上弹出
EN

Stack Overflow用户
提问于 2017-03-05 22:03:49
回答 2查看 2K关注 0票数 2

下面是一个PyQt示例,说明如何使用“WindowStaysOnTopHint”,使对话框弹出,显示在所有其他窗口之上:

代码语言:javascript
运行
复制
#copied from: http://stackoverflow.com/questions/1925015/pyqt-always-on-top
import sys
from PyQt4 import QtGui, QtCore

class mymainwindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self, None, QtCore.Qt.WindowStaysOnTopHint)

app = QtGui.QApplication(sys.argv)
mywindow = mymainwindow()
mywindow.show()
app.exec_()

“WindowStaysOnTopHint”属性似乎是使窗口在所有其他窗口之上弹出的关键。但是,我不知道如何使用'WindowStaysOnTopHint‘属性来使“文件夹实用程序”窗口(在下面的脚本中)弹出,从而显示出自己在所有其他窗口之上。我尝试在self.initUI()附近插入几个选项,如下所示,但是没有什么使“文件夹实用程序”窗口(在下面的脚本中)弹出高于所有其他窗口。

下面是剧本:

代码语言:javascript
运行
复制
import os
import sys 
# Based on 'http://stackoverflow.com/questions/22363123/pyside-get-directory-selected', but with many changes I made
from PySide import QtCore
from PySide import QtGui

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        #self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint)  
        #flags = QtCore.Qt.WindowFlags()# The line above prevented the 
           #   window from appearing at all
        #flags |= QtCore.Qt.WindowStaysOnTopHint # This line and the line 
           # above had no effect.

        self.initUI()
        self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint)

    def initUI(self):

        QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))

        self.setToolTip('This is a <b>QWidget</b> widget')

        # EditText Field
        labelNuDirName = QtGui.QLabel('New Folder Name:', self)
        labelNuDirName.move(15, 10)

        self.etNuDirName = QtGui.QLineEdit('', self)
        self.etNuDirName.resize(self.etNuDirName.sizeHint())

        self.etNuDirName.move(110, 7)

        # Folder Browser
        lbBroswer = QtGui.QLabel('Directory:', self)
        lbBroswer.move(15, 40)

        self.etBrowser = QtGui.QLineEdit('', self)
        self.etBrowser.resize(210,20)#width, height  https://srinikom.github.io/pyside-docs/PySide/QtGui/QWidget.html#PySide.QtGui.PySide.QtGui.QWidget.resize
        self.etBrowser.move(90, 37)
        self.etBrowser.setEnabled(0)
        # self.etBrowser.isReadOnly = 0

        btnBrowse = QtGui.QPushButton('...', self)
        btnBrowse.setToolTip('Select directory ...')
        btnBrowse.resize(30,20)
        btnBrowse.move(305, 37)
        btnBrowse.clicked.connect(self.selectDirectory)

        # Button UI
        btn = QtGui.QPushButton('Create Folder', self)
        btn.setToolTip('This creates the folders.')
        btn.resize(btn.sizeHint())
        btn.move(5, 60)       
        btn.clicked.connect(self.generateFolders)

         ###Folder Selected Show
#        label_NuDirSelected = QtGui.QLabel('', self)
#        self.etNuDirName.resize(210,20)#width, height  https://srinikom.github.io/pyside-docs/PySide/QtGui/QWidget.html#PySide.QtGui.PySide.QtGui.QWidget.resize
#        lbBroswer.move(5, 80)

        self.resize(350, 150)
        self.center()

        self.setWindowTitle('Folder Utility')    
        self.show()

    def center(self):

        qr = self.frameGeometry()
        cp = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


    def selectDirectory(self): 

        dialog = QtGui.QFileDialog
        selected_directory = dialog.getExistingDirectory(None, 
                                                                 title, 
                                                                 startingDir, 
                                                                 QtGui.QFileDialog.ShowDirsOnly)    
        # Use the selected directory...
        self.etBrowser.setText(selected_directory)
        print 'selected_directory:', selected_directory
#        txt4__label_NuDirSelected = 'Directory you selected = "' + selected_directory + '"'
#        self.label_NuDirSelected.setText(txt4__label_NuDirSelected)


    def generateFolders(self):

        existing_directory = self.etBrowser.text()
        NuDirName = self.etNuDirName.text()

        filePath = str(existing_directory) +  os.sep + str(NuDirName) 

        if not os.path.exists(filePath):
            os.makedirs(filePath)

        if os.path.exists(filePath):
            print 'Successfully Created Folders!'

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-05 00:40:38

我使用以下代码使PyQt4窗口成为最顶部的窗口,并在Windows 10 64位环境中将其置于最前面(所有其他窗口前面):

代码语言:javascript
运行
复制
self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)

# The following is drawn from:  https://stackoverflow.com/questions/12118939/how-to-make-a-pyqt4-window-jump-to-the-front   
# the following will remove minimized status 
# and restore window with keeping maximized/normal state
self.setWindowState(self.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive)

# this will activate the window
self.activateWindow()
票数 1
EN

Stack Overflow用户

发布于 2017-03-07 21:41:35

我想我现在知道问题在哪里了。每当您重置窗口标志时,Qt也会在内部调用setParent() --后者将隐藏该窗口。因此,在调用show()之后,必须始终显式地调用setWindowFlags()

self.initUI() (称为show())放在Example.__init__()中的最后一个。或从self.show()中删除initIU,并在main()中添加行ex.show()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42614623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档