我有一个有shorcuts等的程序,可以拍摄并保存截图。一旦屏幕截图被保存,我想显示一个带有气泡的通知: https://tipsfromanand.files.wordpress.com/2011/01/clip_image001.png
如何使用Tkinter?有可能吗?
答案 0 :(得分:1)
使用tkinter?不,你不能,因为泡泡通知只在Windows中可用,而所有(大多数)tkinter的小部件都是跨平台的。但要完成任务,使用win32api
这是一个api for windows是非常有可能的。您可以使用pip来安装此软件包来获取所有模块:pypiwin32
其中包括win32api
,win32gui
...以下是他们制作您想要的泡泡小部件的来源示例:
from win32api import *
from win32gui import *
import win32con
import sys, os
import struct
import time
class WindowsBalloonTip:
def __init__(self, title, msg):
message_map = {
win32con.WM_DESTROY: self.OnDestroy,
}
# Register the Window class.
wc = WNDCLASS()
hinst = wc.hInstance = GetModuleHandle(None)
wc.lpszClassName = "PythonTaskbar"
wc.lpfnWndProc = message_map # could also specify a wndproc.
classAtom = RegisterClass(wc)
# Create the Window.
style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
self.hwnd = CreateWindow( classAtom, "Taskbar", style, \
0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \
0, 0, hinst, None)
UpdateWindow(self.hwnd)
iconPathName = os.path.abspath(os.path.join( sys.path[0], "balloontip.ico" ))
icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
try:
hicon = LoadImage(hinst, iconPathName, \
win32con.IMAGE_ICON, 0, 0, icon_flags)
except:
hicon = LoadIcon(0, win32con.IDI_APPLICATION)
flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "tooltip")
Shell_NotifyIcon(NIM_ADD, nid)
Shell_NotifyIcon(NIM_MODIFY, \
(self.hwnd, 0, NIF_INFO, win32con.WM_USER+20,\
hicon, "Balloon tooltip",title,200,msg))
# self.show_balloon(title, msg)
time.sleep(10)
DestroyWindow(self.hwnd)
UnregisterClass(classAtom, hinst)
def OnDestroy(self, hwnd, msg, wparam, lparam):
nid = (self.hwnd, 0)
Shell_NotifyIcon(NIM_DELETE, nid)
PostQuitMessage(0) # Terminate the app.
def balloon_tip(title, msg):
w=WindowsBalloonTip(msg, title)
balloon_tip('Hello', 'How are you?')
如果你坚持使用tkinter,那么你最接近的就是使用tkinter的messagebox
:以下是一些例子:
import tkinter as tk
from tkinter import messagebox as tkMessageBox
# hide main window
root = tk.Tk()
root.withdraw()
tkMessageBox.showerror("Error", "Error message")
tkMessageBox.showwarning("Warning","Warning message")
tkMessageBox.showinfo("Information","Informative message")
但我仍然建议使用win32api
,因为这是你的问题所要求的。
修改强>
如果您使用tkinter的第一个示例,则需要先import threading
然后将balloon_tip('Hello', 'How are you?')
替换为:
balloon_thread = threading.Thread(target=balloon_tip, args=('Hello', 'How are you?'))
balloon_thread.start()
尝试启动气泡时,由于程序在使用win32api
时暂停,tkinter会对无响应做出反应。
注意:本指南专为python 3设计,因为许多模块在python 2中的命名方式不同。
答案 1 :(得分:0)
tkinter提供的所有可能的小部件都在他们的网站上提供。 据我所知,没有气泡,标签是最接近的东西。 http://effbot.org/tkinterbook/tkinter-index.htm
一种可能的解决方案:
import os
import time
from tkinter import *
fname = "C:\\Users\\...\\test.txt"
while not a:
time.sleep(1)
a = os.path.isfile(fname)
def Notification(master):
w = Label(master, text="Hello, world!")
w.pack()
mainloop()
master = Tk()
Notification(master)
在这里你有一个while循环检查你是否添加了一个新文件。您可以根据需要动态更改名称。找到文件后,会弹出一个tkinter小部件。您可以更改窗口小部件弹出的位置。