Python实践项目讲解:如何用制作一个桌面宠物

制作一个桌面宠物(Desktop Pet)在Python中通常涉及多个步骤,包括创建宠物的图形界面、添加动画效果、处理用户交互等。下面是一个简化的步骤指南,帮助你开始使用Python制作桌面宠物:

  1. 选择图形库
    • Tkinter(Python自带的图形库,简单但功能有限)。
    • Pygame(适用于游戏和多媒体应用,功能强大)。
    • PyQt 或 PySide(跨平台的图形用户界面工具包,用于创建复杂的桌面应用)。
    • 第三方库如Kivy(多平台Python库,用于开发多触摸应用)或wxPython(另一个跨平台的GUI工具包)。
  2. 设计宠物形象
    • 你可以使用图像编辑软件(如Adobe Photoshop、GIMP等)来创建宠物的图片或动画。
    • 宠物可以有不同的状态,比如睡觉、跑动、吃东西等,每种状态对应不同的图片或动画。
  3. 编写代码
    • 初始化图形窗口,并加载宠物的初始状态图片。
    • 编写代码来处理宠物的动画,比如定期更换图片来模拟宠物的动作。
    • 添加用户交互功能,比如用户可以点击或拖动宠物来移动它,或者与宠物进行简单的互动。
  4. 添加逻辑
    • 根据用户的操作或时间的变化,更新宠物的状态和行为。
    • 可以添加一些随机性,使宠物的行为看起来更自然。
  5. 测试与调试
    • 在不同的操作系统和配置上测试你的桌面宠物,确保它能在各种环境下正常工作。
    • 调试并修复任何发现的问题。
  6. 打包与发布
    • 使用如PyInstallercx_Freeze等工具将你的应用打包成一个可执行文件。
    • 发布你的桌面宠物,可以分享到网上供其他人下载和使用。

运行结果:

Python代码示例:(代码不完整,完整代码请看文末图片)

我基本上快发完了,你们先自己试一下能不能写完它

ps:图片自己可以找,不一定要我的

import sys
import os
import random
from PyQt5 import QtWidgets, QtGui, QtCoreclass DeskPet(QtWidgets.QLabel):def __init__(self):super().__init__()self.initUI()self.childPets = []self.isDragging = Falseself.isMoving = Falseself.change = Falsedef initUI(self):self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)self.setAttribute(QtCore.Qt.WA_TranslucentBackground)self.setGeometry(500, 500, 130, 130)self.currentAction = self.startIdleself.timer = QtCore.QTimer(self)self.timer.timeout.connect(self.updateAnimation)self.changeDirectionTimer = QtCore.QTimer(self)  # 添加定时器self.changeDirectionTimer.timeout.connect(self.changeDirection)  # 定时器触发时调用changeDirection方法self.startIdle()self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)self.customContextMenuRequested.connect(self.showMenu)self.setMouseTracking(True)self.dragging = Falsedef loadImages(self, path):return [QtGui.QPixmap(os.path.join(path, f)) for f in os.listdir(path) if f.endswith('.png')]def startIdle(self):self.setFixedSize(130, 130)self.currentAction = self.startIdleself.images = self.loadImages("Deskpet/resource/xianzhi")self.currentImage = 0self.timer.start(100)self.moveSpeed = 0self.movingDirection = 0if self.changeDirectionTimer.isActive():self.changeDirectionTimer.stop()  # 停止方向改变的定时器def startWalk(self):self.setFixedSize(130, 130)if not self.isDragging:self.currentAction = self.startWalkdirection = random.choice(["zuo", "you"])self.images = self.loadImages(f"Deskpet/resource/sanbu/{direction}")self.currentImage = 0self.movingDirection = -1 if direction == "zuo" else 1self.moveSpeed = 10self.timer.start(100)self.changeDirectionTimer.start(3000)  # 启动定时器def movePet(self):screen = QtWidgets.QDesktopWidget().screenGeometry()new_x = self.x() + self.movingDirection * self.moveSpeedif new_x < 10:new_x = 10if self.currentAction == self.startWalk:self.movingDirection *= -1# 停止加载原先的图片self.timer.stop()self.images = []  # 清空当前图片列表if self.movingDirection == -1:  # 向左移动self.images = self.loadImages("Deskpet/resource/sanbu/zuo")else:  # 向右移动self.images = self.loadImages("Deskpet/resource/sanbu/you")self.currentImage = 0self.timer.start(100)elif new_x > screen.width() - self.width() - 10:new_x = screen.width() - self.width() - 10if self.currentAction == self.startWalk:self.movingDirection *= -1# 停止加载原先的图片self.timer.stop()self.images = []  # 清空当前图片列表# 根据移动方向加载对应的图片if self.movingDirection == -1:  # 向左移动self.images = self.loadImages("Deskpet/resource/sanbu/zuo")else:  # 向右移动self.images = self.loadImages("Deskpet/resource/sanbu/you")self.currentImage = 0self.timer.start(100)self.deskpet_rect = self.geometry()for child in self.childPets:if isinstance(child, XiaobaiWindow):self.xiaobai_rect = child.geometry()if self.deskpet_rect.intersects(self.xiaobai_rect):child.close()self.startMeet()self.move(new_x, self.y())def startMeet(self):self.setFixedSize(150, 150)self.currentAction = self.startMeetself.images = self.loadImages("Deskpet/resource/meet")self.currentImage = 0self.moveSpeed = 0self.movingDirection = 0self.timer.start(30)def startLift(self):self.setFixedSize(160, 160)self.currentAction = self.startLiftself.images = self.loadImages("Deskpet/resource/linqi")self.currentImage = 0self.moveSpeed = 0self.movingDirection = 0self.timer.start(100)def startFall(self):self.setFixedSize(150, 150)self.currentAction = self.startFallself.images = self.loadImages("Deskpet/resource/xialuo")self.currentImage = 0self.movingDirection = 0self.moveSpeed = 5self.stopOtherActions()self.timer.start(30)def stopOtherActions(self):self.timer.stop()if self.currentAction == self.startWalk:self.changeDirectionTimer.stop()  # 停止方向判定定时器self.startIdle()elif self.currentAction == self.startLift:self.startIdle()elif self.currentAction == self.startFall:passelse:self.startIdle()def updateAnimation(self):self.setPixmap(self.images[self.currentImage])self.currentImage = (self.currentImage + 1) % len(self.images)if hasattr(self, 'movingDirection'):if self.currentAction == self.startFall:self.fallPet()else:self.movePet()def fallPet(self):self.setFixedSize(130, 130)screen = QtWidgets.QDesktopWidget().screenGeometry()new_y = self.y() + self.moveSpeedif new_y > screen.height() - self.height() - 10:new_y = screen.height() - self.height() - 10self.timer.stop()self.startIdle()self.move(self.x(), new_y)def showMenu(self, position):menu = QtWidgets.QMenu()if self.currentAction == self.sleep:menu.addAction("偷吃宵夜", self.Snack)menu.addAction("唤醒", self.WakeUp)menu.addSeparator()menu.addAction("隐藏", self.minimizeWindow)menu.addAction("退出", self.close)else:menu.addAction("散步", self.startWalk)menu.addAction("下落", self.startFall)menu.addAction("运动", self.exercise)menu.addAction("吃饭", self.eating)menu.addAction("睡觉", self.sleep)menu.addAction("屁屁舞", self.pipi)menu.addAction("分身术", self.clonePet)menu.addAction("动感光波!", self.transform)menu.addAction("呼唤小白", self.summonXiaobai)menu.addAction("测试", self.startMeet)child_menu = menu.addMenu("小彩蛋")child_menu.addAction("开发者的Q/A", self.starttalk)child_menu.addAction("小游戏", self.transform)menu.addSeparator()menu.addAction("停止", self.startIdle)menu.addAction("隐藏", self.minimizeWindow)menu.addAction("退出", self.close)menu.exec_(self.mapToGlobal(position))def Snack(self):self.setFixedSize(160, 130)self.currentAction = self.sleepself.images = self.loadImages("Deskpet/resource/snack")self.currentImage = 0self.timer.start(100)self.moveSpeed = 0self.movingDirection = 0QtCore.QTimer.singleShot(len(self.images) * 100, self.sleep)def transform(self):self.setFixedSize(160, 130)self.currentAction = self.transformself.images = self.loadImages("Deskpet/resource/xiandanchaoren")self.currentImage = 0self.timer.start(100)self.moveSpeed = 0self.movingDirection = 0def pipi(self):self.setFixedSize(300, 130)self.currentAction = self.pipiself.images = self.loadImages("Deskpet/resource/pipi")self.currentImage = 0self.timer.start(25)self.moveSpeed = 0self.movingDirection = 0def exercise(self):self.setFixedSize(150,180 )self.currentAction = self.exerciseself.images = self.loadImages("Deskpet/resource/yundong")self.currentImage = 0self.timer.start(125)self.moveSpeed = 0self.movingDirection = 0def eating(self):self.setFixedSize(160, 90)self.currentAction = self.eatingself.images = self.loadImages("Deskpet/resource/eat")self.currentImage = 0self.timer.start(25)self.moveSpeed = 0self.movingDirection = 0QtCore.QTimer.singleShot(len(self.images) * 30, self.startIdle)def sleep(self):self.setFixedSize(315, 500)self.currentAction = self.sleepself.images = self.loadImages("Deskpet/resource/sleep")self.currentImage = 0self.timer.start(155)self.moveSpeed = 0self.movingDirection = 0def showWakeUpMenu(self):self.setFixedSize(130, 130)self.sleeping = Truemenu = QtWidgets.QMenu()menu.addAction("唤醒", self.wakeUp)menu.exec_(self.mapToGlobal(self.pos()))def WakeUp(self):self.setFixedSize(180, 180)self.sleeping = Falseself.currentAction = self.WakeUpself.images = self.loadImages("Deskpet/resource/waken")self.currentImage = 0self.timer.start(30)# 延时,等待所有图片加载完成QtCore.QTimer.singleShot(len(self.images) * 30, self.finishWakeUp)def Ninjia(self):self.setFixedSize(160, 150)self.sleeping = Falseself.currentAction = self.Ninjiaself.images = self.loadImages("Deskpet/resource/Ninjia")self.currentImage = 0self.timer.start(30)# 延时,等待所有图片加载完成QtCore.QTimer.singleShot(len(self.images) * 30, self.startIdle)def Ninjia2(self):new_pet = DeskPet()self.childPets.append(new_pet)self.setFixedSize(160, 150)self.sleeping = Falseself.currentAction = self.Ninjia2self.images = self.loadImages("Deskpet/resource/Ninjia2")self.currentImage = 0self.timer.start(30)# 延时,等待所有图片加载完成QtCore.QTimer.singleShot(len(self.images) * 30, self.startIdle)def finishWakeUp(self):self.movingDirection = 0self.wakeUpImagesLoaded = Trueself.setFixedSize(180, 180)self.timer.stop()self.currentAction = self.startIdleself.images = self.loadImages("Deskpet/resource/xianzhi")self.currentImage = 0self.timer.start(100)def clonePet(self):new_pet = DeskPet()self.childPets.append(new_pet)self.Ninjia()new_pet.show()new_pet.Ninjia2()def starttalk(self):starttalk = ChatApp()starttalk.show()self.childPets.append(starttalk)def summonXiaobai(self):xiaobai = XiaobaiWindow()xiaobai.show()self.childPets.append(xiaobai)def closeEvent(self, event):for child in self.childPets:child.close()  # 关闭所有子窗口super().closeEvent(event)def minimizeWindow(self):self.showMinimized()def mousePressEvent(self, event):if event.button() == QtCore.Qt.LeftButton:self.dragging = Trueself.isDragging = Trueself.drag_position = event.globalPos() - self.pos()self.prevAction = self.currentActionself.startLift()event.accept()def mouseMoveEvent(self, event):if QtCore.Qt.LeftButton and self.dragging:self.move(event.globalPos() - self.drag_position)event.accept()def mouseReleaseEvent(self, event):if event.button() == QtCore.Qt.LeftButton:self.dragging = Falseself.isDragging = False# 根据需要重新启动changeDirectionTimerif self.currentAction == self.startWalk:self.changeDirectionTimer.start()self.prevAction()  # 或者 self.startIdle(), 根据之前的动作恢复状态event.accept()def changeDirection(self):if self.currentAction == self.startFall or self.currentAction == self.eating or self.currentAction == self.transform or self.currentAction == self.sleep or self.currentAction == self.pipi or self.currentAction == self.exercise or self.currentAction == self.WakeUp or self.currentAction == self.startIdle or self.startMeet:return  # 如果正在执行下落动作,不改变方向if random.random() < 0.5:  # 随机选择是否改变方向self.movingDirection *= -1self.change = Trueif self.change == True:# 停止加载原先的图片self.timer.stop()self.images = []  # 清空当前图片列表self.startWalk()self.change = Falseclass XiaobaiWindow(QtWidgets.QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)self.setAttribute(QtCore.Qt.WA_TranslucentBackground)self.setGeometry(500, 500, 125, 100)self.timer = QtCore.QTimer(self)self.timer.timeout.connect(self.updateAnimation)self.images = self.loadImages("Deskpet/resource/xiaobai")self.currentImage = 0self.timer.start(20)self.dragPosition = QtCore.QPoint()self.label = QtWidgets.QLabel(self)self.label.setGeometry(0, 0, 140, 100)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()def showMenu(self, position):menu = QtWidgets.QMenu()menu.addAction("隐藏", self.minimizeWindow)menu.addAction("回去", self.close)menu.exec_(self.mapToGlobal(position))def loadImages(self, path):return [QtGui.QPixmap(os.path.join(path, f)) for f in os.listdir(path) if f.endswith('.png')]def updateAnimation(self):self.label.setPixmap(self.images[self.currentImage])self.currentImage = (self.currentImage + 1) % len(self.images)def minimizeWindow(self):self.showMinimized()def closeEvent(self, event):self.timer.stop()super().closeEvent(event)def eventFilter(self, obj, event):if event.type() == QtCore.QEvent.ContextMenu:self.showMenu(event.pos())return Truereturn super().eventFilter(obj, event)def showEvent(self, event):self.installEventFilter(self)class ChatApp(QtWidgets.QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('聊天窗口')layout = QtWidgets.QVBoxLayout()label = QtWidgets.QLabel("你好,我是开发者”乐子猪“\n请问你想问什么?\n(该聊天的内容不完善且功能有缺陷)")layout.addWidget(label)button1 = QtWidgets.QPushButton("开发者你是哪里人呀?")button1.clicked.connect(self.on_button1_clicked)layout.addWidget(button1)button2 = QtWidgets.QPushButton("开发者你是一个什么样的人呀?")button2.clicked.connect(self.on_button2_clicked)layout.addWidget(button2)button3 = QtWidgets.QPushButton("我想给开发者生猴子(〃ノωノ)")layout.addWidget(button3)self.new_window = None  # 新窗口实例作为成员变量self.setLayout(layout)def on_button1_clicked(self):self.new_window = QtWidgets.QWidget()self.new_window.setWindowTitle('新窗口')layout = QtWidgets.QVBoxLayout()label = QtWidgets.QLabel("我是广东人。(不过不是土生土长的)\n#请问你还想聊什么?")layout.addWidget(label)button4 = QtWidgets.QPushButton("开发者你喜欢吃什么")button4.clicked.connect(self.on_button4_clicked)layout.addWidget(button4)button3 = QtWidgets.QPushButton("我想给开发者生猴子(〃ノωノ)")layout.addWidget(button3)self.new_window.setLayout(layout)self.new_window.show()def on_button2_clicked(self):self.new_window = QtWidgets.QWidget()self.new_window.setWindowTitle('新窗口')layout = QtWidgets.QVBoxLayout()label = QtWidgets.QLabel("一个帅气逼人,温柔可爱,风流倜傥的美男子!\n#请问你还想聊什么?")layout.addWidget(label)

完整代码在这里👇↓↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/35314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新能源行业必会基础知识-----电力市场概论笔记-----绪论

新能源行业知识体系-------主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/139946830 目录 1. 电力市场的定义2. 对传统电力系统理论的挑战 1. 电力市场的定义 1. 我国电力市场的进程 我国新一轮电力体制改革的5大亮点&…

【Echarts】散点图 制作 气泡 类型图表

目录 需求主要代码效果展示注 需求 需参照设计图画出对应图表 主要代码 /**** 数据 ****/ this.dataList [...Array(8).keys()].map((item) > {return {ywlxmc: 业务类型 (item 1),sl: item > 4 ? 50 : 70} })/**** 气泡样式 ****/ const styleList [{offset: [56…

NVIDIA控制面板3D设置一栏中不能通过预览更改图形设置的解决办法

今天因为GeForce Experience弹窗让我更新之后&#xff0c;手欠直接删掉了 然后图中标出的两个选项就没了 解决方法很简单&#xff0c;就是下回来&#xff0c;hhh https://www.nvidia.cn/geforce/drivers/ 直接下载就行&#xff0c;不用管版本&#xff0c;但是这种驱动千万不要…

U盘提示格式化怎么搞定?本文有5种方法(内含教程)

U盘提示格式化是一种常见故障&#xff0c;即&#xff1a;当U盘插入电脑后&#xff0c;电脑上弹出对话框&#xff0c;提示该U盘需要格式化才能使用。 接触不良、文件系统损坏、热插拔、感染病毒、芯片损坏等原因都可能导致U盘出现此故障。这时点击“格式化”&#xff0c;大概率会…

蒸汽架空管道中的关键守护者:滑动管托、导向管托与固定管托

蒸汽架空管道中的关键守护者&#xff1a;滑动管托、导向管托、固定管托与补偿器的重要角色在蒸汽架空管道系统中&#xff0c;每一个组件都扮演着不可或缺的角色&#xff0c;共同确保管道的安全、高效运行。今天&#xff0c;我们就来深入探讨滑动管托、导向管托、固定管托以及补…

武汉星起航:深度洞察消费趋势,亚马逊美国站选品独具匠心

亚马逊美国站作为全球电商巨头的重要分支&#xff0c;其选品特点不仅反映了美国市场的消费趋势&#xff0c;更引领着全球消费者的购物潮流。从运动户外、宠物用品到美容个人护理&#xff0c;亚马逊美国站的选品策略始终紧跟市场脉搏&#xff0c;为消费者提供丰富多样、品质优良…

简化收支记录,只留关键日期! 一键掌握财务流动,高效管理您的每一笔收支

在繁忙的生活中&#xff0c;管理个人或家庭的财务收支变得尤为重要。然而&#xff0c;传统的记账方式往往繁琐且复杂&#xff0c;让人望而却步。今天&#xff0c;我们为您推荐一款简洁易用的记账神器——晨曦记账本&#xff0c;让您轻松记录收支&#xff0c;只显示日期&#xf…

揭秘!这款电路设计工具让学校师生都爱不释手——SmartEDA的魔力何在?

随着科技的飞速发展&#xff0c;电子设计已成为学校师生们不可或缺的技能之一。而在众多的电路设计工具中&#xff0c;有一款名为SmartEDA的工具&#xff0c;凭借其强大的功能和友好的用户体验&#xff0c;迅速赢得了广大师生的青睐。今天&#xff0c;就让我们一起探索SmartEDA…

Leetcode TOP5 题目和解答:这里只提供一种解题思路,希望引导大家持续学习,可以采用FlowUs息流记录自己的学习

LeetCode 是一个在线编程平台&#xff0c;它提供了大量的算法题目供用户练习。 TOP5题目通常指的是 LeetCode 网站上最受欢迎的前5道题目。 以下是 LeetCode TOP5 题目的列表以及它们常见的解题思路和代码示例。 题目1 两数之和 两数之和 - 1. Two Sum Given an array of int…

html5 video去除边框

video的属性&#xff1a; autoplay 视频在就绪后自动播放。 controls 显示控件&#xff0c;比如播放按钮。 height 设置视频播放器的高度。 width 设置视频播放器的宽度。 loop 循环播放 muted 视频的音频输出静音。 poster 视频加载时显示的图像&#xff0c;或者在用户点击播…

短视频利器 ffmpeg (2)

ffmpeg 官网这样写到 Converting video and audio has never been so easy. 如何轻松简单的使用&#xff1a; 1、下载 官网&#xff1a;http://www.ffmpeg.org 安装参考文档&#xff1a; https://blog.csdn.net/qq_36765018/article/details/139067654 2、安装 # 启用RPM …

clonezilla(再生龙)克隆物理机linux系统,然后再去另一台电脑安装

前言: 总共需要2个u盘,一个装再生龙系统,一个是使用再生龙把硬盘备份到另一个盘里面,恢复的时候,先使用再生龙引导,然后再插上盘进行复制 1.制作启动u盘 1.1下载再生龙Clonezilla 下載 1.2下载UltraISO(https://cn.ultraiso.net/uiso9_cn.exe) 1.3 打开UltraISO,选择co…

聚类模型的算法性能评价

一、概述 作为机器学习领域的重要内容之一&#xff0c;聚类模型在许多方面能够发挥举足轻重的作用。所谓聚类&#xff0c;就是通过一定的技术方法将一堆数据样本依照其特性划分为不同的簇类&#xff0c;使得同一个簇内的样本有着更相近的属性。依不同的实现策略&#xff0c;聚类…

华为HCIP Datacom H12-821 卷16

1.判断题 在 VRRP 中,当设备状态变为 Master 后,,会立刻发送免费 ARP 来刷新下游设备的 MAC 表项,从而把用户的流量引到此台设备上来 A、对 B、错 正确答案: A 解析: 2.判断题 路由选择工具 route- policy 能够基于预先定义的条件来进行过滤并设置 BGP

软件著作权的申请信息在哪看?

软著对于企业来说是一个非常有价值的知识产权。软著可以保证企业自身的利益得到合法的保护&#xff0c;并且可以反映企业的技术创新能力&#xff0c;能够让企业提高自己的竞争力&#xff0c;在申报一些补贴&#xff0c;招标时作为加分项。因此&#xff0c;很多科技型企业都会申…

1982Springboot宠物美容院管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot宠物美容院管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系 统具有完整的源代码和数据库…

【QT】Widget

目录 widget常用属性及其作用 enabled geomtry window frame window frame的影响 相关API windowTitle windowIcon qrc机制 qrc使用方式 自定义鼠标图片 设置字体样式 设置鼠标悬停提示 toolTip 控件获取焦点 styleSheet widget常用属性及其作用 属性作用…

手把手教你打造高精度STM32数字时钟,超详细步骤解析

STM32数字时钟项目详解 1. 项目概述 STM32数字时钟是一个集成了时间显示、闹钟功能、温湿度检测等多功能于一体的小型电子设备。它利用STM32的实时时钟(RTC)功能作为核心,配合LCD显示屏、按键输入、温湿度传感器等外设,实现了一个功能丰富的数字时钟系统。 2. 硬件组成 STM…

IND83081芯片介绍(二)

七、典型应用 上面显示了独立的CAN收发器&#xff0c;而下面则显示了多个iND83081可以共享同一个CAN收发器的应用场景。通过这些连接&#xff0c;iND83081可以实现对多个LED的驱动和控制&#xff0c;同时与外部MCU进行通信 。 八、ELINS接口 1.ELINS简介 ELINS是一种从接口&a…

Oracle 19C19.3 rac安装并RU升级到19.14

19C支持RU补丁安装。 下载好19.14的RU补丁 [rootrac1 soft]# ll total 9830404 -rw-r--r-- 1 grid oinstall 3059705302 Jun 18 15:26 LINUX.X64_193000_db_home.zip -rw-r--r-- 1 grid oinstall 2889184573 Jun 18 15:27 LINUX.X64_193000_grid_home.zip -rw-r--r-- 1 grid …