QWidget 实现 打破布局 或者 当前窗体内的 弹窗 (借助伪造实现)
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 实现 打破布局 或者 当前窗体内的 弹窗 (借助伪造实现)的更多相关文章
- Delphi实现窗体内嵌其他应用程序窗体
实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄),这样就达成了内嵌的效果. 本文实现的是内嵌一个记事本程序, ...
- [代码]Delphi实现窗体内嵌其他应用程序窗体
实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄),这样就达成了内嵌的效果. 本文实现的是内嵌一个记事本程序, ...
- 创建可按比例调整的布局的 Windows 窗体
能够正确调整大小的窗体可以提高您的用户界面的易用性. 此演练演示了如何创建当用户调整窗体大小时按比例调整的布局. 您将使用 TableLayoutPanel 控件实现一个接收联系人信息的数据输入窗体. ...
- Qt窗体内控件自适应调整大小
http://stackoverflow.com/questions/3492739/auto-expanding-layout-with-qt-designer After creating you ...
- C# 鼠标移动Winform窗体内或者panel容器内的控件 显示虚线/实现虚线框来确定位置
C# 鼠标移动WinForm窗体或者panel容器内的控件 移动虚线/实现虚线框来确定位置 1.用到的方法介绍 今天,根据领导指示指导移动容器内的控件,生成虚线框,使用 ControlPaint.Dr ...
- VS中 Winform查看窗体内控件之间的相互关系
视图----其他窗口----文档大纲 这样可以查看之前的窗体布局关系
- pywin32 获取 windows 的窗体内文本框的内容
用 spy++去确认找到了文本框的句柄了. 用函数 win32gui.SendMessage 获取不了文本框的文本内容,用 str 类型的参数接收获取的内容的话没有获取到东西,而用 PyBuffer ...
- C# 窗体内有子控件时鼠标检测
public partial class FormPop : Form { public FormPop() { InitializeComponent(); } private void FormP ...
- 在iframe窗体内 获取父级的元素;;在父窗口中获取iframe中的元素
在iframe中获取父窗口的元素 $(‘#父窗口中的元素ID’, parent.document).click(); 在父窗口中获取iframe中的元素 $(“#iframe的ID”).content ...
随机推荐
- js读取解析JSON数据
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
- addClass() 和 toggleClass()
addClass()是在原有的类基础上增加类属性,仍然保留原有的类的样式.语法格式为:addClass(class0 class1 ...) ,例如: $("p").addClas ...
- 使用sessionStorage、localStorage存储数组与对象(转)
http://my.oschina.net/crazymus/blog/371757 使用sessionStorage.localStorage存储数组与对象 发表于3个月前(2015-01-26 1 ...
- java并发的理解
我认为并发大体上分为两种情况 1,多个线程或者进程访问公共资源,比如12306 2,多个线程访问同一个实例变量,比如tomcat 多个请求的线程访问同一个单例bean,如果bean是有状态的,就可能出 ...
- ZOJ 2770火烧连营——差分约束
偶尔做了一下差分约束. 题目大意:给出n个军营,每个军营最多有ci个士兵,且[ai,bi]之间至少有ki个士兵,问最少有多少士兵. ---------------------------------- ...
- DropDownList的使用,RadioButtonList的使用
DropDownList的使用之从后台动态获取值 前端aspx代码如下 <asp:DropDownList ID="DDLTypeID" runat="server ...
- Bridging signals hdu 1950 (最长上升子序列)
http://acm.split.hdu.edu.cn/showproblem.php?pid=1950 题意:求最长上升(不连续or连续)子序列 推荐博客链接: http://blog.csdn.n ...
- BDC批导数据
1.输入事务代码SHBD进入以下界面: 点击新建记录,创建一个新的BDC录屏记录, 然后根据记录条件进行 BDC录屏代码 perform fill_bdc using ANLKL. call tran ...
- Linux内核同步机制--转发自蜗窝科技
Linux内核同步机制之(一):原子操作 http://www.wowotech.net/linux_kenrel/atomic.html 一.源由 我们的程序逻辑经常遇到这样的操作序列: 1.读一个 ...
- 使用 BeanCopier 复制对象
Cglib是一款比较底层的操作java字节码的框架. BeanCopier是一个工具类,可以用于Bean对象内容的复制. 复制Bean对象内容的方法有很多,比如自己手动get set ,或者使用Pro ...