本日は、ウインドウを見つけて、ウインドウのタイトルを変更した。
opencvで ウインドウでタイトルを変更したかったが(漢字ファイル名の表示)
出来なかったので、回避策!
かなりの時間を費やした、人生の無駄な時間ですね!
でも執念深くやっていると思いつくものがあったですね
win32でウインドウ表示後に変更してしまえば良いじゃないか!
マウスイベントの処理をやりたかったので、 cv2.namedWindow( winName, cv2.WINDOW_NORMAL)
も必要だった。
タイトルに文字は、設定されて表示されているが、文字化けをする
が、
cv2.namedWindowの引数のウインドウ名とcv2.imshowの名前を文字化けのままでも、
マウスイベントは、うまく処理してくれる。
その後に、win32でウインドウのタイトルを変更してみた、
うまくできた、嬉しかった。
早く回避策を考えれば良かった(いやタイトルバーに漢字を使わなくてもそれほど問題は無いのだけど、性分で時間を費やしてしまった。(いかん、いかん、いけない!)
俯瞰の目
でも、何故できないか何故?
調べたら、
コード体系がUnicodeなく、GBK(中国)が使われているとか?
https://en.wikipedia.org/wiki/GBK_(character_encoding)
よくわからないけど。
日本語(Unicode )で渡すと、中国語の漢字が表示されるのかな、
疲れたなぁ!
中国漢字もタイトルバーには、うかく表示されない場合の対処がnet上にはあった、
日本語もこれでいけると期待していたがNGだった。
cv2.imshow(”タイトル”.encode("GBK").decode() )
Unicode(GBK)などエスケープされたバイト列に変換(エンコード)
してからの、
Unicodeなどエスケープされたバイト列を文字列に変換、デコードだけなのだから!
参考URL PythonでUnicodeエスケープされた文字列・バイト列を変換
ここまで,です!
2021/08/02 零時になってしまった、早く寝よう!
【例】
実際のファイル名
fn= C:/Users/kobay/MyTool/pad 拡張機能2
タイトルバーの漢字
良く見ると日本の漢字ではない
(中国の漢字ですね「繁体字化か簡体字は判定できないけど」)
opencvも中国には対応しているのかぁ~
class mosaic():
def __init__( sl, winName="" ):
import cv2
import sys,os,time
#ウィンドウの名前を設定
# ウインドウ名を指定しないとcallbackしないので注意!
# //cv2.namedWindow( winTitleName, cv2.WINDOW_AUTOSIZE)
sl.winName = winName
cv2.namedWindow( winName, cv2.WINDOW_NORMAL)
cv2.setMouseCallback( winName, sl.mouseCallback)
cv2.imshow( winName, img ) # ファイル名がタイトルバーに表示されます
import win32gui
import win32api
import ctypes
handle=0
def setWinTtl( ttl ):
global handle
handle = ctypes.windll.user32.FindWindowW("Main HighGUI class", None)
win32gui.SetWindowText(handle, ttl )
win32gui.SetForegroundWindow(handle)
print("handle,ttl", handle, ttl)
def actWin():
global handle
win32gui.SetForegroundWindow(handle)