python3實現tkinter視窗懸浮,右鍵選單操作,多執行緒控制
阿新 • • 發佈:2018-12-13
專案需要,做了一個demo直接上程式碼供大家參考,並且留為記錄
需要更深入瞭解,可以加微信qypangu相信交流,請注時"csdn python"
#!/usr/bin/python3 # -*- coding: utf-8 -*- import tkinter import threading import time class section: def onPaste(self): print("顯示AI機器人一天的工作") def onCopy(self): print("如果要現在開始工作,就點開始,否則會根據日常的安排工作") def onCut(self): print("學習新的工作技術,只要教過AI一次,就會了,以後的工作都可以交給他") def move(event): global x,y,root new_x = (event.x-x)+root.winfo_x() new_y = (event.y-y)+root.winfo_y() s = "300x300+" + str(new_x)+"+" + str(new_y) root.geometry(s) print("當把我放到左上角200*200的區域時我會走人的,當前是x:%s,y:%s"%(new_x,new_y)) if new_x<50 and new_y<50: exit() def button_1(event): global x,y x,y = event.x,event.y print("event.x, event.y = ",event.x,event.y) '右鍵選單設定' def button_3(event): global menu print(event.x_root, event.y_root) menu.post(event.x_root, event.y_root) ''' global root root.Menu(root.abc,tearoff=0) root.Menu.post(event.x_root, event.y_root) ''' global x,y,root,menu def aiui(): global root,menu root = tkinter.Tk() root.overrideredirect(True) root.wm_attributes('-topmost',1) sw=root.winfo_screenwidth() sh=root.winfo_screenheight() root_x=sw-300 root_y=sh-300-50 root.attributes("-alpha", 0.4)#視窗透明度60 % root.geometry("300x300+%d+%d"%(root_x,root_y)) canvas = tkinter.Canvas(root) canvas.configure(width = 300) canvas.configure(height = 300) #canvas.configure(bg = "red") canvas.configure(highlightthickness = 0) filename = tkinter.PhotoImage(file = "ai_1.gif") canvas.create_image(150,150, image=filename) canvas.bind("<B1-Motion>",move) canvas.bind("<Button-1>",button_1) canvas.bind("<Button-3>",button_3) canvas.pack() section_obj = section() menu = tkinter.Menu(canvas,tearoff=0) menu.add_command(label="我的工作", command=section_obj.onCopy) menu.add_separator() menu.add_command(label="開始工作", command=section_obj.onPaste) menu.add_separator() menu.add_command(label="技能學習", command=section_obj.onCut) menu.add_separator() menu.add_command(label="退出", command=root.quit) root.mainloop() '''執行緒控制''' exitFlag = 0 class threadControl(threading.Thread): def __init__(self,threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): print ("開始執行緒:" + self.name) if self.name=='aiui': aiui() print_time(self.name, self.counter, 5) print ("退出執行緒:" + self.name) def print_time(threadName, delay, counter): while counter: if exitFlag: threadName.exit() time.sleep(delay) print ("%s: %s" % (threadName, time.ctime(time.time()))) counter -= 1 if __name__ == '__main__': thread1=threadControl(1,'thread_1',1) thread2=threadControl(2,'thread_2',2) aiui_obj=threadControl(3,'aiui',3) aiui_obj.start() thread1.start() thread2.start() thread1.join() thread2.join() aiui_obj.join() print ("退出主執行緒")