用PyQt做了一个无边框登陆窗口,效果如下:

下面是代码:

# -*- coding: utf-8 -*-

from PyQt4 import QtGui ,Qt ,QtCore

image=QtGui.QImage()

bgImage=image.load("images/logins.png")

class labelBtn(QtGui.QLabel):

"""

自定义图片按钮类

"""

def __init__(self,ID):

super(labelBtn, self).__init__()

self.setMouseTracking(True)

self.ID=ID

def mouseReleaseEvent(self,event):  #注:

#鼠标点击事件

self.parent().btnHandle(self.ID)

def enterEvent(self,event):

#鼠标进入时间

self.parent().btnEnter(self.ID)

def leaveEvent(self,event):

#鼠标离开事件

self.parent().btnLeave(self.ID)

class login(QtGui.QMainWindow):

def __init__(self,parent=None):

super(login, self).__init__(parent)

self.setWindowTitle(u"学生体能健康测试软件")

self.setFixedSize(347,264)

self.setWindowIcon(QtGui.QIcon("images/umbrella.png"))

#窗口居中显示

desktop =QtGui.QApplication.desktop()

width = desktop.width()

height = desktop.height()

self.move((width - self.width())/2, (height - self.height())/2)

self.setMouseTracking(True)

#无边框

self.setWindowFlags(Qt.Qt.FramelessWindowHint)

#显示托盘信息

self.trayIcon = QtGui.QSystemTrayIcon(self)

self.trayIcon.setIcon(QtGui.QIcon("images/umbrella.png"))

self.trayIcon.show()

self.trayIcon.activated.connect(self.trayClick)       #点击托盘

self.trayMenu()                                       #右键菜单

label_user = QtGui.QLabel(u"账号",self)

label_user.setGeometry(QtCore.QRect(125, 135, 50, 22))

label_passwd = QtGui.QLabel(u"密码",self)

label_passwd.setGeometry(QtCore.QRect(125, 170, 50, 22))

self.label = QtGui.QLabel(self)

self.label.setGeometry(QtCore.QRect(19, 129, 80, 80))

self.label.setPixmap(QtGui.QPixmap("images/teacher.png"))

self.lineEdit_user = QtGui.QLineEdit(u"root",self)

self.lineEdit_user.setGeometry(QtCore.QRect(160, 135, 150, 22))

self.lineEdit_passwd = QtGui.QLineEdit(u'1234',self)

self.lineEdit_passwd.setGeometry(QtCore.QRect(160, 170, 150, 22))

self.lineEdit_passwd.setEchoMode(QtGui.QLineEdit.Password)

self.lineEdit_passwd.setValidator(QtGui.QRegExpValidator(Qt.QRegExp("[A-Za-z0-9]+"),self))

#这里也可以设置QLineEdit背景为透明

self.pushButton_login = QtGui.QPushButton(QtGui.QIcon("images/login.png"),u"登录",self)

self.pushButton_login.setGeometry(QtCore.QRect(250, 235, 75, 22))

self.pushButton_change = QtGui.QPushButton(QtGui.QIcon("images/onetwo.png"),u"身份切换",self)

self.pushButton_change.setGeometry(QtCore.QRect(10, 235, 75, 22))

self.pushButton_change.setFlat(True)

self.pushButton_change.setContextMenuPolicy(Qt.Qt.CustomContextMenu)

self.btn_min=labelBtn(1)               #定义最小化按钮 ID:1

self.btn_min.setParent(self)

self.btn_min.setGeometry(281,0,27,23)

self.btn_min.setToolTip(u"最小化")

self.btn_close=labelBtn(2)              #定义关闭按钮 ID:2

self.btn_close.setParent(self)

self.btn_close.setGeometry(310,0,38,21)

self.btn_close.setToolTip(u"关闭")

self.connect(self.pushButton_change, QtCore.SIGNAL("clicked()"),self.contextMenu)

self.connect(self.pushButton_login, QtCore.SIGNAL("clicked()"),self.log_in)

def contextMenu(self):             self.userOption = QtGui.QAction(QtGui.QIcon("images/user.png"),u"学生", self)             self.rootOption = QtGui.QAction(QtGui.QIcon("images/root.png"),u"老师", self)                         self.userOption.triggered.connect(self.user)             self.rootOption.triggered.connect(self.root)                         menu = QtGui.QMenu(self)             menu.addAction(self.rootOption)             menu.addAction(self.userOption)             menu.exec_(QtGui.QCursor.pos())

def root(self):

self.pushButton_change.setText(u"老师")

self.label.setPixmap(QtGui.QPixmap("images/teacher.png"))

def user(self):

self.pushButton_change.setText(u"学生")

self.label.setPixmap(QtGui.QPixmap("images/students.png"))

def log_in(self):

dlg=QtGui.QMessageBox(self)

dlg.information(self, u"提示",u"应该跳向另一个窗口,这里没有写!",QtGui.QMessageBox.Ok)

def btnHandle(self,ID):

#最小化

if ID==1:

self.hide()

self.showMinimized()

elif ID==2:

#关闭

self.trayIcon.hide()

self.close()

def btnEnter(self,ID):

#鼠标进入

if ID == 1:

self.btn_min.setPixmap(QtGui.QPixmap("images/min.png"))

elif ID == 2:

self.btn_close.setPixmap(QtGui.QPixmap("images/close.png"))

def btnLeave(self,ID):

#鼠标离开

'''false.png这张图片是不存在的,目的是要在鼠标

离开后还原背景,因为默认按钮我已经PS在背景上了'''

self.btn_min.setPixmap(QtGui.QPixmap("images/false.png"))

self.btn_close.setPixmap(QtGui.QPixmap("images/false.png"))

def trayClick(self,reason):

#双击托盘

if reason==QtGui.QSystemTrayIcon.DoubleClick:

self.showNormal()

else:

pass

def trayMenu(self):

#右击托盘弹出的菜单

img_main = QtGui.QIcon("images/main.png")

img_exit = QtGui.QIcon("images/exit.png")

self.trayIcon.setToolTip(u"学生体能健康测试软件")

self.restoreAction = QtGui.QAction(img_main,u"打开主窗口", self)

self.restoreAction.triggered.connect(self.showNormal)

self.quitAction = QtGui.QAction(img_exit,u"退出", self)

self.quitAction.triggered.connect(QtGui.qApp.quit)

self.trayIconMenu = QtGui.QMenu(self)

self.trayIconMenu.addAction(self.restoreAction)

self.trayIconMenu.addSeparator()

self.trayIconMenu.addAction(self.quitAction)

self.trayIcon.setContextMenu(self.trayIconMenu)

def resizeEvent(self,event):

#重绘窗体背景

pal=QtGui.QPalette()

pal.setBrush(QtGui.QPalette.Window,QtGui.QBrush(image.scaled(event.size(),

Qt.Qt.KeepAspectRatioByExpanding,Qt.Qt.SmoothTransformation)))

self.setPalette(pal)

"""下面这两个才是重点,是动得关键"""

def mousePressEvent(self,event):

#鼠标点击事件

if event.button() == QtCore.Qt.LeftButton:

self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()

event.accept()

def mouseMoveEvent(self,event):

#鼠标移动事件

if event.buttons() ==QtCore.Qt.LeftButton:

self.move(event.globalPos() - self.dragPosition)

event.accept()

if __name__ == "__main__":

import sys

app = QtGui.QApplication(sys.argv)

frm = login()

frm.show()

sys.exit(app.exec_())

:目前的问题是QLabel相应的是点击事件,不是单击事件,这个问题还没用解决!

转载:http://blog.chinaunix.net/uid-25979788-id-3081886.html

pyqt4制作透明无边框窗体的更多相关文章

  1. WPF圆角透明无边框窗体

    <Window x:Class="ImportData.MainWindow" xmlns="http://schemas.microsoft.com/winfx/ ...

  2. 01.WPF中制作无边框窗体

    [引用:]http://blog.csdn.net/johnsuna/article/details/1893319   众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormB ...

  3. WPF中制作无边框窗体

    原文:WPF中制作无边框窗体 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBorderStyle属性设置为None来完成.如果要制作成异形窗体,则需要使用图片或者使用G ...

  4. 2017-4-26 winform tab和无边框窗体制作

    TabIndex-----------------------------------确定此控件将占用的Tab键顺序索引 Tabstop-------------------------------指 ...

  5. 无边框窗体和timer控件

    一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要放置的控件可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入(pictureBox1_MouseE ...

  6. winform(无边框窗体与timer)

    一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要放置的控件可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入(pictureBox1_MouseE ...

  7. 【转】【WPF】 WPF 调用API修改窗体风格实现真正的无边框窗体

    WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm中无边框窗体的样式.但是AllowTransparency ...

  8. 无边框窗体、用户控件、Timer控件

    一.无边框窗体1 最大化.最小化以及关闭按钮制作实际上就是更换点击前.指向时.点击时的图片 (1)将图片放在该文件夹的Debug中,获取图片的路径Application.StartupPath + & ...

  9. WinForm 无边框窗体和timer控件

    一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入,移出,按下三个事件会让按钮改变样式 如何获取图 ...

随机推荐

  1. mongodb入门教程二

    title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...

  2. 外网访问自己的tomcat

    我们平常学习时经常会写一下javaweb程序,我们为了更能逼近现实,就想着自己的javaweb程序发布后,外网的同学能够访问我们的网站,难道我们去买空间,去买域名嘛,其实也没必要,我们只是学习,测试之 ...

  3. 关于ISAPI和CGI限制,这个要设为允许

    否则程序就报这个错误,注意,设置允许时不是在添加的网站上设置,而是在根iis,选择后右侧出现关于ISAPI和CGI限制,进去后选择相应版本,设置为允许就可以了

  4. SQL Server 2008将数据导出为脚本

    之前我们要将一个表中的数据导出为脚本,那么只有在网上找一个导出数据的Script,然后运行就可以导出数据脚本了.现在在SQL Server 2008的Management Studio中增加了一个新特 ...

  5. java代码实现 金字塔(倒置)

    在jsp中实现如图所示的金字塔,,代码如下: 大致思路如下: 1.先画出前5行.因为 i+空格数=总行数,所以第一行的空格数是 总行数-i(第几行),然后画出 *,*的数目=2*i-11: 2.在画出 ...

  6. expected function body after function declarator

    我出现这个错误是在pch中添加了一个a.h文件 然后在其他文件的b.h文件中就出现这个错误.. 后来排查出原因是: 在pch中, 这个a.h文件在b.h文件之后, 所以在b.h中使用的时候就会报错

  7. 控制弹出div显示在鼠标附近的位置

    前一个页面: $("#txt_ocname").click(function () { art.dialog.open("/SelPosAll.aspx", { ...

  8. Linux入门 (笔记)

    Man can conquer nature. "人定胜天" 一.基本操作   1.重要快捷键 Tab 补全命令.目录.参数.文件名等 Ctrl+c 强制终止当前的程序 Ctrl+ ...

  9. Spring4.0学习笔记(1) —— 基础知识

    1.基本定义 IOC: 其思想是反转资源获取的方向,传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源,而应用了 IOC之后,容器主动将资源推送给它所管理的组件,组件索要做 ...

  10. Thinkphp 数据的修改及删除操作

    一.数据修改操作 save()  实现数据修改,返回受影响的记录条数 具体有两种方式实现数据修改,与添加类似(数组.AR方式) 1.数组方式: a)         $goods = D(“Goods ...