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