but = QtWidgets.QToolButton(Dialog2)
but.setText('**')
but.setAutoRaise(True)
layout.addWidget(but)
Dialog2.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool)
Dialog2.setWindowOpacity(1)
Dialog2.setAttribute(QtCore.Qt.WA_TranslucentBackground)

Qt.Popup     Window    Indicates that the widget is a pop-up top-level window, i.e. that it is modal, but has a window system frame appropriate for pop-up menus.

Qt.Tool        Indicates that the widget is a tool window. A tool window is often a small window with a smaller than usual title bar and decoration, typically used for collections of tool buttons. If there is a parent, the tool window will always be kept on top of it. If there isn't a parent, you may consider using Qt::WindowStaysOnTopHint as well. If the window system supports it, a tool window can be decorated with a somewhat lighter frame. It can also be combined with Qt::FramelessWindowHint. On OS X, tool windows correspond to the Floating class of windows. This means that the window lives on a level above normal windows; it impossible to put a normal window on top of it. By default, tool windows will disappear when the application is inactive. This can be controlled by the Qt::WA_MacAlwaysShowToolWindow attribute.

from PyQt5 import QtCore, QtGui, QtWidgets
class Popup(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Popup, self).__init__(parent )
self.setWindowOpacity(1) # 必须是以顶级弹窗的形式出现,否则最小的长度不好设置
# 最大化 和 最小化的按钮占地方
self.setWindowFlags( QtCore.Qt.Popup | QtCore.Qt.FramelessWindowHint ) self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.setupUi() # 只能放两个
self._uis = [] def setupUi(self): layout_main = QtWidgets.QVBoxLayout(self)
self.setLayout(layout_main)
layout_main.setContentsMargins(0, 0, 0, 0)
layout_main.setSpacing(0) layout_top = QtWidgets.QHBoxLayout()
layout_top_1 = QtWidgets.QHBoxLayout()
spacerItem_1 = QtWidgets.QSpacerItem(2, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self._layout_top = layout_top_1
layout_top.addLayout(layout_top_1)
layout_top.addItem(spacerItem_1)
layout_top.setStretch(1, 1) layout_bottom = QtWidgets.QHBoxLayout()
layout_bottom_1 = QtWidgets.QHBoxLayout()
self._layout_bottom = layout_bottom_1 spacerItem_2 = QtWidgets.QSpacerItem(2, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
layout_bottom.addLayout(layout_bottom_1)
layout_bottom.addItem(spacerItem_2)
layout_bottom.setStretch(1, 1) layout_main.addLayout(layout_top)
layout_main.addLayout(layout_bottom) # 隐藏事件 的 重新
def hideEvent(self, event):
print('hideEvent') def addShow(self, ui_1, ui_2):
self._layout_top.addWidget(ui_1)
self._layout_bottom.addWidget(ui_2) self._uis = [ui_1, ui_1] def showPop(newText): sender = widget.sender() print('newText', newText, sender.text(), pop.width()) # 需计算长度才行
pop.resize(80, 80) pop.show()
but_1.setFocus()
point = input.pos()
point_global = input.mapToGlobal(point)
pop.move(point_global.x() - point.x(), point_global.y() - point.y())
print(point_global.x(), point_global.y(), point.x(), point.y()) if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv) pop = Popup()
but_1 = QtWidgets.QLineEdit()
but_1.setFixedSize(50, 20)
but_1.setText('aa') but_2 = QtWidgets.QLineEdit()
but_2.setFixedSize(80, 80)
but_2.setText('bb')
pop.addShow(but_1, but_2)
print('aa') widget = QtWidgets.QWidget() layout = QtWidgets.QVBoxLayout(widget) input = QtWidgets.QLineEdit()
layout.addWidget(input) input2 = QtWidgets.QLineEdit()
layout.addWidget(input2) input.textChanged.connect(showPop) widget.show() sys.exit(app.exec_())

QWidget 实现 打破布局 或者 当前窗体内的 弹窗 (借助伪造实现)的更多相关文章

  1. Delphi实现窗体内嵌其他应用程序窗体

    实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄),这样就达成了内嵌的效果. 本文实现的是内嵌一个记事本程序, ...

  2. [代码]Delphi实现窗体内嵌其他应用程序窗体

    实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄),这样就达成了内嵌的效果. 本文实现的是内嵌一个记事本程序, ...

  3. 创建可按比例调整的布局的 Windows 窗体

    能够正确调整大小的窗体可以提高您的用户界面的易用性. 此演练演示了如何创建当用户调整窗体大小时按比例调整的布局. 您将使用 TableLayoutPanel 控件实现一个接收联系人信息的数据输入窗体. ...

  4. Qt窗体内控件自适应调整大小

    http://stackoverflow.com/questions/3492739/auto-expanding-layout-with-qt-designer After creating you ...

  5. C# 鼠标移动Winform窗体内或者panel容器内的控件 显示虚线/实现虚线框来确定位置

    C# 鼠标移动WinForm窗体或者panel容器内的控件 移动虚线/实现虚线框来确定位置 1.用到的方法介绍 今天,根据领导指示指导移动容器内的控件,生成虚线框,使用 ControlPaint.Dr ...

  6. VS中 Winform查看窗体内控件之间的相互关系

    视图----其他窗口----文档大纲 这样可以查看之前的窗体布局关系

  7. pywin32 获取 windows 的窗体内文本框的内容

    用 spy++去确认找到了文本框的句柄了. 用函数 win32gui.SendMessage 获取不了文本框的文本内容,用 str 类型的参数接收获取的内容的话没有获取到东西,而用 PyBuffer ...

  8. C# 窗体内有子控件时鼠标检测

    public partial class FormPop : Form { public FormPop() { InitializeComponent(); } private void FormP ...

  9. 在iframe窗体内 获取父级的元素;;在父窗口中获取iframe中的元素

    在iframe中获取父窗口的元素 $(‘#父窗口中的元素ID’, parent.document).click(); 在父窗口中获取iframe中的元素 $(“#iframe的ID”).content ...

随机推荐

  1. DOS批量递归删除文件夹

    @echo off for /d /r E:\test01\ %%i in (test) do rd /s /q "%%i" pause

  2. dynamic2016 crm 安装语言包提示缺少组件报错

    当安装dynamic2016 CRM英文语言包安装成功后,在系统切换语言的时候提示如下报错为缺少CRM reporting extensions 插件导致,在CRM的解压安装包如下路径找到对应的执行文 ...

  3. jquery学习--属性操作

    学习jquery很长一段时间了,知道对属性操作的方式为: $("#xx1").attr("xx2"); //获取属性值 $("#xx1"). ...

  4. vagrant 安装使用 win7

    第一步.安装VirtualBox和vagrant 下载地址: https://www.virtualbox.org/wiki/Downloads http://downloads.vagrantup. ...

  5. [转] MovieClip转Bitmap方法

    package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; ...

  6. ng-repeat指令应用

    1.ng-repeat 一看就知道跟foreach等指令类似,用于循环重复.一般用于列表和表格中.用法如下: <tr ng-repeat="data in dataList" ...

  7. android text

    "@you bang--- go on -------" 需要做分享内容,前面有段格式固定写死,同时颜色为灰色:后面的内容可以编辑,颜色为黑色,同时支持多行 有人用textview ...

  8. Android之Fragment学习总结(1)

    对于Fragment的学习: 近日初步学习了Fragment这以特殊的组件,其依托与一个Activity,与Activity的生命周期息息相关,为其设置的视图只有当其关联到一个Activity才会起效 ...

  9. 斯坦福第十四课:降维(Dimensionality Reduction)

    14.1  动机一:数据压缩 14.2  动机二:数据可视化 14.3  主成分分析问题 14.4  主成分分析算法 14.5  选择主成分的数量 14.6  重建的压缩表示 14.7  主成分分析法 ...

  10. Eclipse4.6(Neon) + Tomcat8 + MAVEN3.3.9 + SVN项目完整环境搭建

    软件清单 jdk-8u102-windows-x64.exe eclipse-inst-win64.exe (Eclipse4.6 Neon) apache-tomcat-8.5.5-windows- ...