2020-09-25

Python代码自动判断系统并运行相应的程序。

import time
import os
import sys
import psutil

from PyQt5 import QtWidgets
from PyQt5.QtGui import QWindow
from cefpython3 import cefpython as cef
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import *

import platform
system = platform.system()

if system == "Windows":
    import win32gui

    num = 0

    def killProcess(self):
        for p in psutil.process_iter():
            if p.name() == self:
                for child in p.children():
                    os.kill(child.pid, -1)
                os.kill(p.pid, -1)


    class projectWindow(QWidget):
        def closeEvent(self, event):
            killProcess("manage.exe")
            sys.exit()

        def __init__(self):
            super().__init__()

            self.initUI()

        def initUI(self):
            self.main_layout = QtWidgets.QGridLayout()
            self.setWindowTitle("项目gui界面")
            self.setGeometry(600, 400, 300, 150)

            self.button1 = QtWidgets.QPushButton()
            self.button2 = QtWidgets.QPushButton()

            self.button1.setText("查看django页面")
            self.button2.setText("查看日志")

            self.browser_widget = CefBrowser()  # 插入浏览器内容界面

            self.main_layout.addWidget(self.button1, 1, 0)
            self.main_layout.addWidget(self.button2, 2, 0)
            self.setLayout(self.main_layout)

            # 信号和槽函数
            self.signal_slots()

        def signal_slots(self):
            # 点击浏览器页面,触发跳转事件,跳转到目标地址
            self.button1.clicked.connect(self.slot_load_url)

        def slot_load_url(self):
            global num
            if num == 0:
                self.browser_widget = CefBrowser()  # 插入浏览器内容界面
                self.browser_widget.embedBrowser("http://127.0.0.1:8000/")
                num += 1
                cef.MessageLoop()
                num -= 1

            else:
                reply = QtWidgets.QMessageBox.question(self, '警告', '已经打开django页面,是否继续打开',
                                                       QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
                if reply == QtWidgets.QMessageBox.Yes:
                    self.browser_widget = CefBrowser()  # 插入浏览器内容界面
                    self.browser_widget.embedBrowser("http://127.0.0.1:8000/")
                    cef.MessageLoop()
                    num -= 1


    class CefBrowser(QtWidgets.QWidget):
        def __init__(self, parent=None):
            self.browser = None
            super().__init__(parent)

        def embedBrowser(self, inputURL):
            # 获取组件
            window_info = cef.WindowInfo()
            cef.PostTask(cef.TID_UI, self.create_browser, window_info, inputURL)

        def create_browser(self, window_info, url):
            # 初始化浏览器环境
            self.browser = cef.CreateBrowserSync(window_info, url=url)


    class LogWindow(QWidget):
        def closeEvent(self, event):
            event.ignore()
            log.hide()

        def __init__(self):
            super().__init__()
            self.initUI()

        def initUI(self):
            layout = QtWidgets.QGridLayout()
            self.setLayout(layout)
            window = QWindow.fromWinId(handle)  # 创建一个win32窗口的代理QWindow

            self.setWindowTitle("我的gui窗口")
            t = self.createWindowContainer(window, self)  # 把窗口封装为一个QWidget控件
            layout.addWidget(t)
            self.setGeometry(250, 150, 1600, 800)

    hwnd_title = {}

    def get_all_hwnd(hwnd, mouse):
        if (win32gui.IsWindow(hwnd)
                and win32gui.IsWindowEnabled(hwnd)
                and win32gui.IsWindowVisible(hwnd)):
            hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})

    if __name__ == '__main__':
        os.popen("start manage.exe runserver")
        time.sleep(0.4)
        app = QApplication(sys.argv)
        cef.Initialize()

        win32gui.EnumWindows(get_all_hwnd, 0) 
        for h, t in hwnd_title.items():
            if t:
                if t.endswith("manage.exe"):
                    handle = h  

        main_window = projectWindow()
        main_window.show()
        log = LogWindow()
        main_window.button2.clicked.connect(log.show)
        app.exec_()
        cef.Shutdown()


elif system == "Linux":
    import subprocess
    import signal

    num = 0

    def kill():
        pids = psutil.pids()
        for pid in pids:
            p = psutil.Process(pid)
            if p.name() == "xterm":
                num = pid
                os.kill(num, signal.SIGKILL)


    class ProjectWindow(QWidget):
        def closeEvent(self, event):
            kill()
            sys.exit()

        def __init__(self):
            super().__init__()
            self.main_layout = QtWidgets.QGridLayout()
            self.button1 = QtWidgets.QPushButton()
            self.button2 = QtWidgets.QPushButton()
            self.initUI()

        def initUI(self):
            self.setLayout(self.main_layout)
            self.setWindowTitle("项目gui界面")
            self.setGeometry(300, 350, 300, 150)

            self.setFixedSize(400, 250)

            self.button1.setText("查看django页面")

            self.button2.setText("查看日志")

            self.main_layout.addWidget(self.button1, 1, 0)
            self.main_layout.addWidget(self.button2, 2, 0)

            self.signal_slots()

        def signal_slots(self):
            self.button1.clicked.connect(self.slot_load_url)

        def slot_load_url(self, event):
            global num
            if num == 0:
                self.browser_widget = CefBrowser()  # 插入浏览器内容界面
                self.browser_widget.embedBrowser("http://127.0.0.1:8000/")
                num += 1
                cef.MessageLoop()
                num -= 1

            else:
                reply = QtWidgets.QMessageBox.question(self, '警告', '已经打开django页面,是否继续打开',
                                                       QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
                if reply == QtWidgets.QMessageBox.Yes:
                    self.browser_widget = CefBrowser()  # 插入浏览器内容界面
                    self.browser_widget.embedBrowser("http://127.0.0.1:8000/")
                    cef.MessageLoop()
                    num -= 1


    class CefBrowser(QtWidgets.QWidget):
        def __init__(self, parent=None):
            self.browser = None
            super().__init__(parent)

        def embedBrowser(self, inputURL):
            window_info = cef.WindowInfo()
            cef.PostTask(cef.TID_UI, self.create_browser, window_info, inputURL, "django页面")

        def create_browser(self, window_info, url, win_name):
            self.browser = cef.CreateBrowserSync(window_info, url=url, window_title=win_name)


    class LogWindow(QWidget):
        def closeEvent(self, event):
            event.ignore()
            log.hide()

        def __init__(self):
            super().__init__()
            self.window()

        def window(self):
            layout = QtWidgets.QGridLayout()
            self.setLayout(layout)
            self.setWindowTitle("日志窗口")
            self.setGeometry(300, 500, 800, 400)
            self.resize(600, 500)


    if __name__ == '__main__':
        def event():
            log.activateWindow()
            log.showNormal()


        app = QApplication(sys.argv)
        cef.Initialize()
        main_window = ProjectWindow()  # GUI主窗口
        main_window.show()  # 展示主窗口
        log = LogWindow()  # 日志窗口
        log.setFixedSize(486, 318)
        x = log.winId()

        m = subprocess.Popen("xterm -into %d -hold -e './manage runserver'" % x,
                             cwd='/home/ldd/PycharmProjects/djangoTest3/dist/manage', shell=True)

        main_window.button2.clicked.connect(event)  # 日志窗口按钮点击,显示日志窗口
        app.exec_()
        cef.Shutdown()
        sys.exit()  # 关闭窗口后,进程退出

    pass

else:
    pass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值