python实现360的字符显示界面
#!/usr/bin/python
#-*-coding:utf-8-*-
frompush_buttonimport*
fromclabelimport*
fromcommonimport*
fromPyQt4.QtGuiimport*
fromPyQt4.QtCoreimport*
fromPyQt4.Qtimport*
classCharacterWidget(QWidget):
def__init__(self,parent=None):
super(CharacterWidget,self).__init__()
self.mouse_press=False
self.mouse_move=False
self.current_index=0#当前图片下标
self.current_pos_x=0
#self.name_list=QStringList()
self.m_mouseSrcPos=QPoint()
self.m_mouseDstPos=QPoint()
self.label_move=False
self.label_array=[CLabel(),CLabel(),CLabel(),CLabel()]#存储图片的数组
self.resize(QSize(WINDOW_WIDTH,WINDOW_HEIGHT))
self.setWindowFlags(Qt.FramelessWindowHint)
self.background_label= QLabel(self)#背景图片
self.background_label.setPixmap(QPixmap("./img/Character/bg_bottom.png"))
self.background_label.setGeometry(QRect(0,0,self.width(),self.height()))
#将4张图片合成一张
self.pixmap=QPixmap(QSize(self.width()*WINDOW_PAGE_COUNT,WINDOW_HEIGHT))#
painter =QPainter(self.pixmap)
fori inrange(WINDOW_PAGE_COUNT):
painter.drawImage(QRect(WINDOW_WIDTH*i,0,WINDOW_WIDTH,WINDOW_HEIGHT),\
QImage(QString("./img/Character/desktop_%1").arg(i)))
self.total_label= QLabel(self)#图片(结合体)
self.total_label.resize(self.pixmap.size())
self.total_label.setPixmap(self.pixmap)
self.total_label.move(WINDOW_START_X,WINDOW_START_Y)
self.close_button= PushButton(self) #关闭按钮
self.translateLanguage()
foriinrange(WINDOW_BUTTON_COUNT):
self.label= CLabel(self)
self.label.resize(QSize(155,45))
self.label.setPixmap(QPixmap(QString("./img/Character/btn_%1").arg(i)))
self.label.setText(self.name_list[i])
self.label.move(8+i*170,319)
self.connect(self.label,SIGNAL("clicked()"),self,SLOT("changeCurrentPage(CLabel())"))
self.label_array[i]=self.label
self.label_array[0].setMousePressFlag(False)
self.close_button.loadPixmap("./img/sysButton/close.png")
self.close_button.move(self.width()-52,0)
self.connect(self.close_button,SIGNAL("clicked()"),self,SLOT("close()"))
deftranslateLanguage(self):
self.name_list=[u"function",u"clearcookie",u"triggerman",u"booster"]
self.close_button.setToolTip(u"close")
defmousePressEvent(self,event):
if(event.button()==Qt.LeftButton):
self.m_mouseSrcPos=event.pos()
if(self.m_mouseSrcPos.y()<=40):
self.mouse_move=True
else:
self.current_pos_x=self.total_label.x()
self.mouse_press=True
elif(event.button()==Qt.RightButton):
if(self.label_move):
if(self.current_index>0):
self.current_index=self.current_index-1
self.moveCurrentPage(False)#右移
defmouseReleaseEvent(self,event):
self.xpos=0
if(self.mouse_press):
if(self.label_move):
self.m_mouseDstPos=event.pos()
self.xpos=self.m_mouseDstPos.x()-self.m_mouseSrcPos.x()
if(self.xpos>0):#右移
if(self.xpos>=WINDOW_ONEBUTTON_WIDTH):
if(self.current_index>0):
self.current_index=self.current_index-1
self.moveCurrentPage(False)#右移
else:
self.moveCurrentPage(True)#左移
else:
self.moveCurrentPage(True)#左移
else:#左移
if(self.xpos<=-WINDOW_ONEBUTTON_WIDTH):
if(self.current_index<WINDOW_PAGE_COUNT-1):
self.current_index=self.current_index+1
self.moveCurrentPage(True)#左移
else:
self.moveCurrentPage(False)#右移
else:
self.moveCurrentPage(False)#右移
self.mouse_press=False
elif(self.mouse_move):
self.mouse_move=False
defchangeCurrentPage(label):
foriinrange(WINDOW_BUTTON_COUNT):
if(label!=self.label_array[i]):
self.label_array[i].setMousePressFlag(False)
#获取点击的图标下标
index=0
fori inrange(WINDOW_PAGE_COUNT):
if(label==self.label_array[i]):
index=i
return
#若下标小于当前下标右移,否则左移
if(index<self.current_index):
while(index!=self.current_index):
self.current_index=self.current_index-1
self.moveCurrentPage(False)
elif(index>self.current_index):
while(index!=self.current_index):
self.current_index=self.current_index+1
self.moveCurrentPage(True)
defmouseMoveEvent(self,event):
x=10
if(self.mouse_press):
if(self.label_move):
self.m_mouseDstPos=event.pos()
x=self.m_mouseDstPos.x()-self.m_mouseSrcPos.x()
self.setLabelMove(False)
self.total_label.move(self.current_pos_x+x,WINDOW_START_Y)
self.setLabelMove(True)
elif(self.mouse_move):
self.m_mouseDstPos=event.pos()
self.move(event.pos()+self.m_mouseDstPos-self.m_mouseSrcPos)#注意debug
defkeyPressEvent(self,e):
if(self.label_move):
ife.key()==Qt.Key_Left|e.key()==Qt.Key_Up:
if(self.current_index>0):
self.current_index=self.current_index-1
self.moveCurrentPage(False)#右移
elife.key()==Qt.Key_Down|e.key()==Qt.Key_Right:
if(self.current_index<WINDOW_PAGE_COUNT-1):
self.current_index=self.current_index+1
self.moveCurrentPage(True)#左移
defmoveCurrentPage(self,direction):
#改变当前页面对应的按钮
self.changeCurrentButton()
#图片的几个分割点
#0-680,680-1360,1360-2040,2040-2720
#真:向左移 假:向右移
#左移的几种可能性,对于x坐标
#index=0,将label移动到-680*0
#index=1,将label移动到-680*1
#index=2,将label移动到-680*2
#index=3,将label移动到-680*3
self.setLabelMove(False)
self.current_pos_x=self.total_label.x()#当前label坐标
self.dest_pos_x=-WINDOW_WIDTH*self.current_index#目标X坐标
if(direction):
if(self.current_pos_x>self.dest_pos_x):
self.total_label.move(self.current_pos_x-WINDOW_PAGE_MOVE,WINDOW_START_Y)
self.current_pos_x=self.total_label.x()
qApp.processEvents(QEventLoop.AllEvents)
else:
if(self.current_pos_x<self.dest_pos_x):
self.total_label.move(self.current_pos_x+WINDOW_PAGE_MOVE,WINDOW_START_Y)
self.current_pos_x=self.total_label.x()
qApp.processEvents(QEventLoop.AllEvents)
self.total_label.move(self.dest_pos_x,WINDOW_START_Y)
self.setLabelMove(True)
defchangeCurrentButton(self):
foriinrange(WINDOW_BUTTON_COUNT):
if(i!=self.current_index):
self.label_array[i].setMousePressFlag(False)
else:
self.label_array[i].setMousePressFlag(True)
defsetLabelMove(self,enable):
self.label_move=enable
if__name__=="__main__":
importsys
app=QApplication(sys.argv)
Character=CharacterWidget()
Character.show()
sys.exit(app.exec_())
相关文章
- mt4 python_一个使用Python自动化交易外汇MT4脚本实现「建议收藏」
- python进制转换函数及方法[通俗易懂]
- python的random()函数用法_Python随机函数random用法示例
- python hashlib_Python hashlib模块实例使用详解
- python常见运维脚本_Python运维常用脚本[通俗易懂]
- Python元组_python输出元组
- python chr()和ord()_Python函数ord
- python表情代码_Python实现表情包的代码实例[通俗易懂]
- 【说站】python中lstrip()截掉字符
- Python实现自动回复_python 微信机器人
- 遗传算法的应用实例python实现_遗传算法Python解决一个问题
- Python修改文件后缀_python重命名文件名
- python程序化交易实例-用 Python 实现你的量化交易策略「建议收藏」
- python json.loads 中文_Python 的完美 json loads
- Python tkinter 一个Music download software的界面
- Python实战之数字、日期和时间的高级处理
- Python+selenium环境下的Unable to find element with xpath的问题解决
- Rust最受喜爱却少有人用,Python仅排第六,2021全球开发者调查报告出炉
- python-Python与SQLite数据库-处理SQLite查询结果(一)
- python递归删除指定目录详解编程语言
- Python递归实现汉诺塔详解编程语言
- python使用Python轻松操作Redis(redis-)
- Python在MSSQL中的应用实践(python与mssql)
- 利用Neo4j和Python进行无缝图形数据库支持(neo4j python)
- Python实现MySQL数据库的读取(python读取mysql)
- Python脚本实现Linux命令快捷控制(python执行linux命令)
- Linux下Python编程:从入门到精通(linux下python编程)
- 【保姆级】Python项目(Flask网页)部署到Docker的完整过程
- 从零学python系列之数据处理编程实例(一)
- python实现去除下载电影和电视剧文件名中的多余字符的方法