由於去離校較遠的地方實習,平時想連接實驗室的電腦,只要得到電腦的IP地址即可。但是由於電腦的不穩定性導致意外重啓之後就得不到IP地址了。所以萌生了想製作一個可以發IP地址的小軟件。最終的目的是不管電腦出現什麼情況,總是能接收到當前電腦的IP地址(前提是電腦可自動聯網)。
一. 準備
由於時間不多,就花2天時間來製作,所以最後決定使用PYQT來製作。
語言:Python3.6
包:PyQt5,mysql
IDE:Pycharm
二. 製作思路
1. 首先獲取電腦的IP地址,用戶名,mac地址
2. 實現登陸註冊功能,可以將上面獲取的信息存到服務器的用戶信息裏面
3. 製作一個小網站來顯示IP地址
三. 實現
1. 獲取IP地址等信息代碼較簡單,部分代碼如下。
computeMac = uuid.UUID(int=uuid.getnode()).hex[-12:]
computeMac=":".join([computeMac[e:e+2] for e in range(0,11,2)])
computerName = socket.gethostname()
computerIP = socket.gethostbyname(computerName)
conmputeUsername=getpass.getuser()
2. 實現登陸註冊功能。下面只展示了按下登陸註冊按鈕以後的操作。至於怎麼連接數據庫,怎樣驗證請讀者自己百度,這些代碼較爲簡單。
def login(self):
"""按下登陸按鈕的操作"""
cueerntTime = time.strftime("%H:%M:%S::", time.localtime(time.time()))#獲取當前時間
if(self.isLogin==False): #未登陸的操作
if(self.connectToServer()):
username=self.usernameEdit.text()
password=self.passwordEdit.text()
if(username=='' or password==''):
self.logEdit.append(cueerntTime + "用戶名或密碼不能爲空")
else:
sqlString="SELECT COUNT(username) FROM userinfo WHERE username='"+username+"' AND password='"+password+"'"
self.cur.execute(sqlString)
if(self.cur._rows[0][0]>0):#登陸成功
self.logEdit.append(cueerntTime + "登陸成功!")
self.isLogin=True
self.usernameEdit.setEnabled(False)
self.passwordEdit.setEnabled(False)
self.loginButton.setStyleSheet("QPushButton{border-image: url(:/image/logoutButton.png);}"
"QPushButton:hover{border-image: url(:/image/logoutHoverButton.png);}")
if(self.remerberBox.isChecked()):
self.config['autoLogin'] = True
self.config['remberPassword'] = True
self.config['username'] =username
self.config['password'] =password
self.updateConfigFile()
self.sendipThread.start()
else:
self.logEdit.append(cueerntTime + "登陸失敗!請檢查賬戶名和密碼!!!")
else:#登錄後的操作
self.isLogin = False
self.usernameEdit.setEnabled(True)
self.passwordEdit.setEnabled(True)
self.logEdit.append(cueerntTime + "退出成功!!!")
self.loginButton.setStyleSheet("QPushButton{border-image: url(:/image/loginButton.png);}"
"QPushButton:hover{border-image: url(:/image/loginHoverButton.png);}")
3. 網站製作的代碼這裏就不寫了。
四. 結果
界面如下:
五. 未完成功能
1.依舊沒能實現自動開機自啓。本來打算通過修改註冊表來實現開機自啓,但是不知道什麼原因,修改註冊表後開機能夠自己啓動,但是會報錯,實現該功能的函數依舊保留在原代碼裏面了。目前我是通過手動配置開機啓動該軟件。
2. 註冊功能未完成
3. 如果電腦意外關機,仍然不能自動獲取IP地址
六. 體驗與源代碼
1. 打包好的軟件
鏈接: https://pan.baidu.com/s/1RydNdM_2hy4cHgwZfryNkA 密碼: vxfy
2. 獲取IP地址的網站: www.37300.top
用戶名:test 密碼:test (客戶端和網站都用這個用戶名和密碼)
3. github源代碼
https://github.com/651742112/getip
4. CSDN源代碼下載
https://download.csdn.net/download/q651742112/10585732
5. 主界面源代碼
# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import pyqtSignal
import pymysql
import os
import uuid
import socket
import getpass
import win32api
import win32con
import time
import image_rc
from PyQt5 import sip
import subprocess
class Ui_HomePage(QWidget):
""" 主頁"""
def __init__(self):
super(Ui_HomePage, self).__init__()
self.conn=''
self.cur=''
self.isLogin=False
self.sendipThread=SendIPThread()
self.sendipThread.senip.connect(self.sendIPToServer)
if(os.path.exists("config.py")==False):#不存在在配置文件的話就建立配置文件
self.newConfigFile()
self.config=self.loadCongfigFile('config.py')#加載配置文件
self.setupUi()
if(self.config['remberPassword']==True):#將配置文件中保存的帳戶名和密碼加到表單中
self.usernameEdit.setText(self.config['username'])
self.passwordEdit.setText(self.config['password'])
self.remerberBox.toggle()
if(self.config['autoLogin']==True):#默認自動登陸,系統不可修改
self.login()
#self.startingUpWindow()
def setupUi(self):
"""主頁上的控件"""
"""大部分是直接通過QT工具Designer生成UI,然後在其基礎上修改了部分樣式"""
#主界面設置
self.setObjectName("HomePage")
self.resize(940, 500)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
self.setSizePolicy(sizePolicy)
self.setMinimumSize(QtCore.QSize(940, 500))
self.setMaximumSize(QtCore.QSize(940, 500))
self.setBaseSize(QtCore.QSize(1199, 650))
self.setStyleSheet("color: rgb(26, 23, 17);\n""background-image: url(:/image/homeBg.png);")
self.setInputMethodHints(QtCore.Qt.ImhHiddenText)
#右側登陸界面設置
self.loginPage = QtWidgets.QWidget(self)
self.loginPage.setGeometry(QtCore.QRect(370, 100, 545, 270))
self.loginPage.setMinimumSize(QtCore.QSize(545, 270))
self.loginPage.setMaximumSize(QtCore.QSize(545, 270))
self.loginPage.setSizeIncrement(QtCore.QSize(545, 270))
self.loginPage.setMouseTracking(False)
self.loginPage.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
self.loginPage.setStyleSheet("background-image: url(:/image/loginBg.png);\n")
self.loginPage.setObjectName("loginPage")
#“登陸”文字
self.loginText = QtWidgets.QWidget(self.loginPage)
self.loginText.setGeometry(QtCore.QRect(40, 30, 44, 18))
self.loginText.setMinimumSize(QtCore.QSize(44, 18))
self.loginText.setMaximumSize(QtCore.QSize(44, 18))
self.loginText.setSizeIncrement(QtCore.QSize(44, 18))
self.loginText.setBaseSize(QtCore.QSize(44, 18))
self.loginText.setStyleSheet("background-image: url(:/image/loginText.png);")
self.loginText.setObjectName("loginText")
#“註冊”文字
self.registText = QtWidgets.QWidget(self.loginPage)
self.registText.setGeometry(QtCore.QRect(370, 30, 45, 19))
self.registText.setMinimumSize(QtCore.QSize(45, 19))
self.registText.setMaximumSize(QtCore.QSize(45, 19))
self.registText.setSizeIncrement(QtCore.QSize(45, 19))
self.registText.setBaseSize(QtCore.QSize(44, 19))
self.registText.setStyleSheet("image: url(:/image/registText.png);")
self.registText.setObjectName("registText")
#“free accout”文字
self.freeAccoutText = QtWidgets.QWidget(self.loginPage)
self.freeAccoutText.setGeometry(QtCore.QRect(370, 60, 88, 13))
self.freeAccoutText.setMinimumSize(QtCore.QSize(88, 13))
self.freeAccoutText.setMaximumSize(QtCore.QSize(88, 13))
self.freeAccoutText.setStyleSheet("image: url(:/image/freeAccount.png);")
self.freeAccoutText.setObjectName("freeAccoutText")
#“本軟件不提供...”文字
self.registticText = QtWidgets.QWidget(self.loginPage)
self.registticText.setGeometry(QtCore.QRect(370, 90, 157, 56))
self.registticText.setMinimumSize(QtCore.QSize(157, 56))
self.registticText.setMaximumSize(QtCore.QSize(157, 56))
self.registticText.setSizeIncrement(QtCore.QSize(157, 56))
self.registticText.setBaseSize(QtCore.QSize(157, 56))
self.registticText.setStyleSheet("image: url(:/image/registPrompt.png);")
self.registticText.setObjectName("registticText")
#用戶名輸入框
self.usernameEdit = QtWidgets.QLineEdit(self.loginPage)
self.usernameEdit.setGeometry(QtCore.QRect(60, 90, 271, 34))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.usernameEdit.sizePolicy().hasHeightForWidth())
self.usernameEdit.setSizePolicy(sizePolicy)
self.usernameEdit.setMinimumSize(QtCore.QSize(271, 34))
self.usernameEdit.setMaximumSize(QtCore.QSize(271, 34))
self.usernameEdit.setSizeIncrement(QtCore.QSize(274, 34))
self.usernameEdit.setBaseSize(QtCore.QSize(274, 34))
palette = QtGui.QPalette()
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Dark, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Mid, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush)
brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.HighlightedText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Dark, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Mid, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush)
brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.HighlightedText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Dark, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Mid, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush)
brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.HighlightedText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText, brush)
self.usernameEdit.setPalette(palette)
font = QtGui.QFont()
self.usernameEdit.setFont(font)
self.usernameEdit.setWhatsThis("")
#輸入框樣式
self.usernameEdit.setStyleSheet("border-radius:5px;\n"
"selection-color: rgb(255, 255, 255);\n"
"width: 100%; \n"
"height: 34px; \n"
"padding: 6px 12px; \n"
"font-size: 14px; \n"
"line-height: 1.428571429; \n"
"color:#fff; \n"
"vertical-align: middle; \n"
"color: qradialgradient(spread:repeat, cx:0.5, cy:0.5, radius:0.077, fx:0.5, fy:0.5, stop:0 rgba(255, 255, 255, 0), stop:0.497326 rgba(255, 255, 255, 0), stop:1 rgba(255, 255, 255, 0));\n"
"border: 1px solid #cccccc; \n"
"border-radius: 4px; \n"
"BACKGROUND-COLOR: transparent;")
self.usernameEdit.setText("")
self.usernameEdit.setMaxLength(20)
self.usernameEdit.setReadOnly(False)
self.usernameEdit.setProperty("setPlaceholderText(\"username\")", "")
self.usernameEdit.setObjectName("usernameEdit")
#密碼輸入框
self.passwordEdit = QtWidgets.QLineEdit(self.loginPage)
self.passwordEdit.setGeometry(QtCore.QRect(60, 140, 271, 34))
self.passwordEdit.setMinimumSize(QtCore.QSize(271, 34))
self.passwordEdit.setMaximumSize(QtCore.QSize(271, 34))
self.passwordEdit.setSizeIncrement(QtCore.QSize(274, 34))
self.passwordEdit.setBaseSize(QtCore.QSize(274, 34))
self.passwordEdit.setEchoMode(QLineEdit.Password)
palette = QtGui.QPalette()
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush)
brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.HighlightedText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush)
brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.HighlightedText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush)
gradient = QtGui.QRadialGradient(0.5, 0.5, 0.077, 0.5, 0.5)
gradient.setSpread(QtGui.QGradient.RepeatSpread)
gradient.setCoordinateMode(QtGui.QGradient.ObjectBoundingMode)
gradient.setColorAt(0.0, QtGui.QColor(0, 169, 255, 147))
gradient.setColorAt(0.497326, QtGui.QColor(0, 0, 0, 147))
gradient.setColorAt(1.0, QtGui.QColor(0, 169, 255, 147))
brush = QtGui.QBrush(gradient)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush)
brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.HighlightedText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText, brush)
self.passwordEdit.setPalette(palette)
font = QtGui.QFont()
self.passwordEdit.setFont(font)
self.passwordEdit.setWhatsThis("")
self.passwordEdit.setStyleSheet("border-radius:5px;\n"
"selection-color: rgb(255, 255, 255);\n"
"width: 100%; \n"
"height: 34px; \n"
"padding: 6px 12px; \n"
"font-size: 14px; \n"
"line-height: 1.428571429; \n"
"color:#fff; \n"
"vertical-align: middle; \n"
"color: qradialgradient(spread:repeat, cx:0.5, cy:0.5, radius:0.077, fx:0.5, fy:0.5, stop:0 rgba(255, 255, 255, 0), stop:0.497326 rgba(255, 255, 255, 0), stop:1 rgba(255, 255, 255, 0));\n"
"border: 1px solid #cccccc; \n"
"border-radius: 4px; \n"
"BACKGROUND-COLOR: transparent;")
self.passwordEdit.setMaxLength(20)
self.passwordEdit.setProperty("setPlaceholderText(\"username\")", "")
self.passwordEdit.setObjectName("passwordEdit")
#登陸按鈕
self.loginButton = QtWidgets.QPushButton(self.loginPage)
self.loginButton.setGeometry(QtCore.QRect(240, 200, 85, 33))
self.loginButton.setMinimumSize(QtCore.QSize(85, 33))
self.loginButton.setMaximumSize(QtCore.QSize(85, 33))
self.loginButton.setSizeIncrement(QtCore.QSize(85, 33))
self.loginButton.setBaseSize(QtCore.QSize(85, 33))
self.loginButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.loginButton.clicked.connect(self.login)
#self.loginButton.setStyleSheet("QPushButton{border-image: url(:/image/logoutButton.png);}"
#"QPushButton:hover{border-image: url(:/image/logoutHoverButton.png);}")
self.loginButton.setStyleSheet("QPushButton{border-image: url(:/image/loginButton.png);}"
"QPushButton:hover{border-image: url(:/image/loginHoverButton.png);}")
self.loginButton.setText("")
self.loginButton.setObjectName("loginButton")
#“remeber me”文字
self.remerbermeText = QtWidgets.QWidget(self.loginPage)
self.remerbermeText.setGeometry(QtCore.QRect(90, 220, 77, 13))
self.remerbermeText.setMinimumSize(QtCore.QSize(77, 13))
self.remerbermeText.setMaximumSize(QtCore.QSize(77, 13))
self.remerbermeText.setSizeIncrement(QtCore.QSize(77, 13))
self.remerbermeText.setBaseSize(QtCore.QSize(77, 13))
self.remerbermeText.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
self.remerbermeText.setStyleSheet("image: url(:/image/rememberme.png);")
self.remerbermeText.setObjectName("remerbermeText")
self.remerberBox = QtWidgets.QCheckBox(self.loginPage)
self.remerberBox.setGeometry(QtCore.QRect(70, 220, 13, 13))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.remerberBox.sizePolicy().hasHeightForWidth())
#“remeber me”選擇框
self.remerberBox.setSizePolicy(sizePolicy)
self.remerberBox.setText("")
self.remerberBox.setObjectName("remerberBox")
self.registButton = QtWidgets.QPushButton(self.loginPage)
self.registButton.setGeometry(QtCore.QRect(390, 160, 85, 33))
self.registButton.setMinimumSize(QtCore.QSize(85, 33))
self.registButton.setMaximumSize(QtCore.QSize(85, 33))
self.registButton.setSizeIncrement(QtCore.QSize(85, 33))
self.registButton.setBaseSize(QtCore.QSize(85, 33))
self.registButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.registButton.setStyleSheet("QPushButton{border-image: url(:/image/registButton.png);}"
"QPushButton:hover{border-image: url(:/image/registhoverButton.png);}")
self.registButton.setText("")
self.registButton.setObjectName("registButton")
self.loginText.raise_()
self.registText.raise_()
self.freeAccoutText.raise_()
self.registticText.raise_()
self.passwordEdit.raise_()
self.loginButton.raise_()
self.remerbermeText.raise_()
self.remerberBox.raise_()
self.registButton.raise_()
self.usernameEdit.raise_()
#日誌框,即系統消息
self.logWidget = QtWidgets.QWidget(self)
self.logWidget.setGeometry(QtCore.QRect(50, 100, 235, 268))
self.logWidget.setMinimumSize(QtCore.QSize(235, 268))
self.logWidget.setStyleSheet("background-image: url(:/image/logBg.png);")
self.logWidget.setObjectName("logWidget")
#日誌輸出框
self.logEdit = QtWidgets.QTextEdit(self.logWidget)
self.logEdit.setGeometry(QtCore.QRect(30, 50, 181, 191))
self.logEdit.setObjectName("logEdit")
self.logEdit.setEnabled(False)
self.systemMessgewidget = QtWidgets.QWidget(self.logWidget)
self.systemMessgewidget.setGeometry(QtCore.QRect(70, 20, 87, 19))
self.systemMessgewidget.setMinimumSize(QtCore.QSize(87, 19))
self.systemMessgewidget.setMaximumSize(QtCore.QSize(87, 19))
self.systemMessgewidget.setSizeIncrement(QtCore.QSize(87, 19))
self.systemMessgewidget.setBaseSize(QtCore.QSize(87, 19))
self.systemMessgewidget.setStyleSheet("background-image: url(:/image/systemMessage.png);")
self.systemMessgewidget.setObjectName("systemMessgewidget")
self.homebgwidget = QtWidgets.QWidget(self)
self.homebgwidget.setGeometry(QtCore.QRect(0, 0, 941, 501))
self.homebgwidget.setObjectName("homebgwidget")
self.homebgwidget.raise_()
self.loginPage.raise_()
self.logWidget.raise_()
self.retranslateUi(self)
QtCore.QMetaObject.connectSlotsByName(self)
def retranslateUi(self, HomePage):
_translate = QtCore.QCoreApplication.translate
HomePage.setWindowTitle(_translate("HomePage", "主頁"))
self.usernameEdit.setPlaceholderText(_translate("HomePage", "username"))
self.passwordEdit.setPlaceholderText(_translate("HomePage", "password"))
def login(self):
"""按下登陸按鈕的操作"""
cueerntTime = time.strftime("%H:%M:%S::", time.localtime(time.time()))#獲取當前時間
if(self.isLogin==False): #未登陸的操作
if(self.connectToServer()):
username=self.usernameEdit.text()
password=self.passwordEdit.text()
if(username=='' or password==''):
self.logEdit.append(cueerntTime + "用戶名或密碼不能爲空")
else:
sqlString="SELECT COUNT(username) FROM userinfo WHERE username='"+username+"' AND password='"+password+"'"
self.cur.execute(sqlString)
if(self.cur._rows[0][0]>0):#登陸成功
self.logEdit.append(cueerntTime + "登陸成功!")
self.isLogin=True
self.usernameEdit.setEnabled(False)
self.passwordEdit.setEnabled(False)
self.loginButton.setStyleSheet("QPushButton{border-image: url(:/image/logoutButton.png);}"
"QPushButton:hover{border-image: url(:/image/logoutHoverButton.png);}")
if(self.remerberBox.isChecked()):
self.config['autoLogin'] = True
self.config['remberPassword'] = True
self.config['username'] =username
self.config['password'] =password
self.updateConfigFile()
self.sendipThread.start()
else:
self.logEdit.append(cueerntTime + "登陸失敗!請檢查賬戶名和密碼!!!")
else:#登錄後的操作
self.isLogin = False
self.usernameEdit.setEnabled(True)
self.passwordEdit.setEnabled(True)
self.logEdit.append(cueerntTime + "退出成功!!!")
self.loginButton.setStyleSheet("QPushButton{border-image: url(:/image/loginButton.png);}"
"QPushButton:hover{border-image: url(:/image/loginHoverButton.png);}")
def connectToServer (self):
"""連接服務器數據庫"""
cueerntTime = time.strftime("%H:%M:%S::", time.localtime(time.time()))
try:
self.conn = pymysql.connect(host='47.106.22.99', port=3306, user='getip', password='root', db='getip',
charset='utf8')
self.cur = self.conn.cursor()
#self.logEdit.append(cueerntTime+"服務器連接成功")
return True
except:
self.logEdit.append(cueerntTime+"服務器連接失敗,請稍後重試")
return False
def newConfigFile(self):
"""建立配置文件"""
configFile = "config.py"
trans_fp = open(configFile, 'w')
config={}
config['autoLogin']=False
config['remberPassword']=False
config['username']=''
config['password']=''
trans_fp.write(str(config))
trans_fp.close()
def updateConfigFile(self):
"""更新配置文件"""
configFile = "config.py"
trans_fp = open(configFile, 'w')
trans_fp.write(str(self.config))
trans_fp.close()
def loadCongfigFile(self,filename):
"""加載配置文件"""
str = open(filename, 'r').read()
return eval(str)
def sendIPToServer(self):
cueerntTime = time.strftime("%H:%M:%S::", time.localtime(time.time())) # 獲取當前時間
if(self.isLogin==True):
if (self.connectToServer()):
username = self.usernameEdit.text()
computeMac = uuid.UUID(int=uuid.getnode()).hex[-12:]
computeMac=":".join([computeMac[e:e+2] for e in range(0,11,2)])
computerName = socket.gethostname()
computerIP = socket.gethostbyname(computerName)
conmputeUsername=getpass.getuser()
sqlString ="SELECT COUNT(username) FROM userip WHERE username='"+username+"' AND mac='"+computeMac+"'"
self.cur.execute(sqlString)
if (self.cur._rows[0][0] > 0): # 數據庫表存在用戶名和MAC,則更新
sqlString="UPDATE userip SET loginname='"+conmputeUsername+"', ip='"+computerIP+"',lastupdatetime=NOW() WHERE username='"+username+"' AND mac='"+computeMac+"'"
self.cur.execute(sqlString)
self.conn.commit()
print("存在")
else:
sqlString="INSERT INTO userip(username,mac,loginname,ip,lastupdatetime) VALUES('"+username+"','"+computeMac+"','"+conmputeUsername+"','"+computerIP+"',NOW())"
self.cur.execute(sqlString)
self.conn.commit()
print("不存在,插入")
print("登陸成功後發送IP")
print("正在向服務器發送IP")
def startingUpWindow(self):
"""實現開機自啓"""
name = 'oftpublic' # 要添加的項值名稱
print()
path = os.getcwd()+'\getip.exe' # 要添加的exe路徑
# 註冊表項名
KeyName = 'Software\\Microsoft\\Windows\\CurrentVersion\\Run'
# 異常處理
try:
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, KeyName, 0, win32con.KEY_ALL_ACCESS)
win32api.RegSetValueEx(key, name, 0, win32con.REG_SZ, path)
win32api.RegCloseKey(key)
except:
print('error')
print('開機啓動成功!')
class SendIPThread(QtCore.QThread):
senip = pyqtSignal()
def __init__(self, parent=None):
self.bootJudgment()
QtCore.QThread.__init__(self, parent)
def run(self):#每個兩秒向服務器更新一次IP地址
while(True):
self.sleep(2)
self.senip.emit()
def bootJudgment(self):
"""開機判斷是否連上網,沒有連上則睡眠30s"""
isLinkNetwork = subprocess.call('ping www.baidu.com', shell=True)
while(isLinkNetwork!=0) :
isLinkNetwork = subprocess.call('ping www.baidu.com', shell=True)#重複判斷是否連接網絡
self.sleep(30)#連接不上網絡就繼續連接
if __name__ == "__main__":
app = QApplication(sys.argv)
mainMindow = Ui_HomePage()
mainMindow.show()
sys.exit(app.exec_())
七. 說明
1. 網站服務器在阿里雲上
2. 所有數據都不受保護
3. 數據庫連接等操作源碼都有,暫時不會關閉該數據庫