pyqt製作自動獲取電腦IP地址的軟件(含源代碼)

       由於去離校較遠的地方實習,平時想連接實驗室的電腦,只要得到電腦的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. 數據庫連接等操作源碼都有,暫時不會關閉該數據庫

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章