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. JQuery 简单的文字超出部分隐藏下拉显示

    HTML代码: <body> <div class="txt_bos"><!--在每一个放置文字的class外面包一个div,以便设置动画样式用,同样 ...

  2. Struts2复习笔记

    一.Struts2的获得 Struts2的官网是http://struts.apache.org/,需要的同学可以自己去官网上下载. 二.Struts2的配置 以动态web项目为例,讲解配置Strut ...

  3. linux下mysql集群的安装

    3台redhat服务器: SQL节点(mysqld): 192.168.1.77;192.168.1.78 数据节点(ndbd): 192.168.1.77;192.168.1.78 管理节点(ndb ...

  4. 如何在spark中读写cassandra数据 ---- 分布式计算框架spark学习之六

    由于预处理的数据都存储在cassandra里面,所以想要用spark进行数据分析的话,需要读取cassandra数据,并把分析结果也一并存回到cassandra:因此需要研究一下spark如何读写ca ...

  5. 2d,3d中旋转推导

    二维绕原点旋转,其实点为(x,y),旋转角度为黄色标注的角度. 推导过程如下: x' = r cos(al+be); y' = r sin(al+be);x '= rcosalcosbe-rsinal ...

  6. WPF 获得鼠标相对于屏幕的位置,相对于控件的位置

    相对于屏幕的位置 第一步: /// <summary>    /// 用于获得鼠标相对于屏幕的位置    /// </summary>    public class Win3 ...

  7. Spring+MyBatis多数据源配置实现

    最近用到了MyBatis配置多数据源,原以为简单配置下就行了,实际操作后发现还是要费些事的,这里记录下,以作备忘 不多废话,直接上代码,后面会有简单的实现介绍 jdbc和log4j的配置 #定义输出格 ...

  8. 深入浅出Symfony2 - 如何提高网站响应速度 [转]

    简介 Symfony2是一个基于PHP语言的Web开发框架,有着开发速度快.性能高等特点.但Symfony2的学习曲线也比较陡峭,没有经验的初学者往往需要一些练习才能掌握其特性.相对其他框架,Symf ...

  9. 利用Apache Ant编译Hadoop2.6.0-eclipse-plugin

    环境要求:系统不重要,重要的是要有Ant环境,这里不做赘述,自行百度配置去. 1)在github上下载Hadoop-eclipse-plugin-master的zip包,下载地址. 2)在Hadoop ...

  10. Python爬虫(一) 信息系统集成及服务资质网

    警告:不要恶意的访问网站,仅供学习使用! 本教程实例只抓取信息系统集成及服务资质网的企业资质查询. 1. 抓包 打开谷歌浏览器的开发者工具并访问该网站,过滤请求后找到请求数据的包. 1.1 找到相应封 ...