1. 程式人生 > >python3實現tkinter視窗懸浮,右鍵選單操作,多執行緒控制

python3實現tkinter視窗懸浮,右鍵選單操作,多執行緒控制

專案需要,做了一個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 ("退出主執行緒")