예제 #1
0
    def create_resolution_diy(self):
        """ 分辨率 自定义 """
        og = BigTitle(self.top_win, text='分辨率 自定义')
        frame = og.frame
        frame_main = og.frame_main

        frame_option = tk.Frame(frame_main)
        frame_notes = tk.Frame(frame_main)

        v1 = self.var_cb_size
        v2 = self.var_cb_density
        cb1 = tk.Checkbutton(frame_option,
                             text=' 宽x高 ',
                             variable=v1,
                             command=lambda v=0: setting.modify_one("size_on", str(v1.get())),
                             fg=theme.COLOR_BLACK
                             )
        txt1 = tk.Entry(frame_option,
                        textvariable=self.var_text_size,
                        validate="focusout",
                        validatecommand=self.validate_size,
                        width=9,
                        fg=theme.COLOR_BLACK,
                        background=theme.COLOR_LIST_BG
                        )

        cb2 = tk.Checkbutton(frame_option,
                             text=' DPI ',
                             variable=v2,
                             command=lambda v=0: setting.modify_one("density_on", str(v2.get())),
                             fg=theme.COLOR_BLACK
                             )
        txt2 = tk.Entry(frame_option,
                        textvariable=self.var_text_density,
                        validate="focusout",
                        validatecommand=self.validate_density,
                        width=4,
                        fg=theme.COLOR_BLACK,
                        background=theme.COLOR_LIST_BG
                        )

        utils.tooltip(cb1, "屏幕分辨率,例如:1280x720")
        utils.tooltip(cb2, "屏幕密度,取值范围为 160~480")

        s = "小天才手表(宽x高:320x360,DPI:320)"
        tk.Label(frame_notes, text=s, fg=theme.COLOR_GRAY).grid(column=1, row=1)

        cb1.grid(column=1, row=1)
        txt1.grid(column=2, row=1)
        cb2.grid(column=3, row=1)
        txt2.grid(column=4, row=1)

        frame_option.grid(column=1, row=1, sticky=tk.N + tk.S + tk.W)
        frame_notes.grid(column=1, row=2, sticky=tk.N + tk.S + tk.W)

        self.input_size = txt1
        self.input_density = txt2

        return frame
예제 #2
0
def clear_msg():
    txt = utils.label_msg
    if txt is not None:
        try:
            txt['text'] = ''
            utils.tooltip(txt, '')
        except RuntimeError:
            print('RuntimeError: main thread is not in main loop')
예제 #3
0
    def set(self, package):
        self.cbb.set(package)
        if not self.list_package.count(package):
            return

        # 更新简介框
        index = self.list_package.index(package)
        n = self.list_name[index]
        path = self.list_path[index]
        if n and path:
            s = "{0}    {1}".format(n, path)
        elif path:
            s = path
        else:
            s = n
        self.txt['text'] = s
        self.txt.grid(column=1, row=2, sticky=tk.W)
        utils.tooltip(self.txt, s, 300, 3000)
예제 #4
0
 def __update_tips(self):
     s1 = "左键点击以 应用名称 命名\n{}\n\n右键点击 可批量命名剪贴板中的apk".format(self.rename_str1)
     s2 = "左键点击以 应用包名 命名\n{}\n\n右键点击 可批量命名剪贴板中的apk".format(self.rename_str2)
     s3 = "左键点击以 渠道名称 命名\n{}\n\n右键点击 可批量命名剪贴板中的apk".format(self.rename_str3)
     utils.tooltip(self.btn_rename1, s1)
     utils.tooltip(self.btn_rename2, s2)
     utils.tooltip(self.btn_rename3, s3)
예제 #5
0
    def __init__(self):
        top_win = tk.Toplevel(utils.win)
        # '180x200+1920+1080'
        top_win.geometry(_win_pos)
        top_win.title('TV遥控器')
        frame_btn = tk.Frame(top_win)
        frame_txt = tk.Frame(top_win)

        # 配置 并创建按钮
        config = ([self.btn_up, '▲', 2, 1, "btn_up",
                   "快捷键:↑"], [self.btn_down, '▼', 2, 3, "btn_down", "快捷键:↓"],
                  [self.btn_left, '◀', 1, 2, "btn_left",
                   "快捷键:←"], [self.btn_right, '▶', 3, 2, "btn_right", "快捷键:→"],
                  [self.btn_enter, '●', 2, 2, "btn_enter", "快捷键:回车键"
                   ], [self.btn_menu, '☰', 1, 4, "btn_menu", "可尝试 菜单键 或 右徽标键"],
                  [self.btn_home, 'home', 2, 4, "btn_home", ""], [
                      self.btn_back, '⇦', 3, 4, "btn_back",
                      "可尝试 esc键 或 backspace键"
                  ], [self.btn_vol_down, '音量-', 1, 6, "btn_vol_down",
                      ""], [self.btn_vol_mute, '静音', 2, 6, "btn_vol_mute", ""],
                  [self.btn_vol_up, '音量+', 3, 6, "btn_vol_up",
                   ""], [self.btn_power, '电源', 1, 7, "btn_power", "功能:电源键"],
                  [self.btn_screen, '✄', 2, 7, "btn_screen",
                   ""], [self.btn_switch, '切换', 3, 7, "btn_switch", "功能:切换应用"])
        arr = []
        for c in config:
            text = c[1]
            column = c[2]
            row = c[3]
            name = c[4]
            tips = c[5]

            c[0] = tk.Button(frame_btn, text=text, width=4)
            btn = c[0]

            setattr(btn, "name", name)
            btn.bind("<Button-1>", self.btn_call)

            if tips:
                utils.tooltip(btn, tips)
            btn.grid(column=column, row=row)

            arr.append(btn)

        # 分割线
        tk.Label(frame_btn).grid(column=1, row=5, sticky=tk.W)

        t = tuple(arr)
        utils.set_groove(t)

        # 文本框
        txt = tk.Label(frame_txt, fg=util_theme.COLOR_GRAY, width=18)
        txt.grid(column=1, row=1)

        frame_btn.grid(column=1, row=1)
        frame_txt.grid(column=1, row=2)

        # frame_btn.focus()
        # frame_btn.bind("<Button-1>", self.refocus)
        top_win.bind('<Key>', self.btn_call)
        top_win.protocol("WM_DELETE_WINDOW", self.on_closing)
        self.txt = txt
        self.serial = 'emulator-5554'
        self.data = None
        self.frame_btn = frame_btn
        self.top_win = top_win
        self.auto_select()
예제 #6
0
def show_msg(msg):
    txt = utils.label_msg
    if txt is not None:
        txt['text'] = msg
        utils.tooltip(txt, msg)
예제 #7
0
    def manual_int(self):
        if self.is_manual_int:
            return
        self.is_manual_int = True
        win = self.win

        # 颜色
        color = util_theme.COLOR_BLACK

        # 导入文件 / ↑ / ↓ / - /+
        frame_top = tk.Frame(win)
        frame_center = tk.Frame(win)
        frame_file = tk.Frame(win)
        frame_group = tk.Frame(win)
        frame_bottom = tk.Frame(win)

        if utils.is_windows:
            w_arr = [30, 60 + 20, 192 + 30, 150 + 240 - 20 - 30, 70]
        else:
            w_arr = [50, 60 + 20, 220 + 30, 240 + 240 - 20 - 30, 70]
        file_chooser = TreeViewNew(
            frame_file,
            tree_num=10,
            file_types=[("视频文件", "*.mp4"), ("QuickTime", "*.mov"),
                        ("avi", "*.avi"), ("mkv", "*.mkv"), ("mpg", "*.mpg")],
            paste_notice=';-) 右键点我 粘贴视频文件,支持mp4、mov、avi、mkv、mpg格式',
            tree_widths=w_arr,
            has_list_btn=True)

        # listbox 和 scrollBar

        # 加片头/加片尾/加幕布/加水印 /输出目录
        f_mp4 = [("视频文件", "*.mp4")]
        f_png = [("图片文件", "*.png")]
        fc_pt = FileChooser(frame_group,
                            cb_text="加片头 ",
                            filetypes=f_mp4,
                            action_btn_text='浏览…',
                            hasGROOVE=True)
        fc_pw = FileChooser(frame_group,
                            cb_text="加片尾 ",
                            filetypes=f_mp4,
                            action_btn_text='浏览…',
                            hasGROOVE=False)
        fc_fr = FileChooser(frame_group,
                            cb_text="加幕布 ",
                            filetypes=f_png,
                            action_btn_text='浏览…',
                            hasGROOVE=True)
        fc_wm = FileChooser(frame_group,
                            cb_text="加水印 ",
                            filetypes=f_png,
                            action_btn_text='浏览…',
                            hasGROOVE=False)

        # 备案号 选择对象
        fc_number = NumberGroup(frame_group, text_width=79)

        fc_out = FileChooser(frame_group,
                             btn_text=" 输出目录 ",
                             action_btn_text='浏览…',
                             isFolder=True,
                             hasGROOVE=True,
                             btn_call=self.goto_out_dir,
                             text_width=80)

        # frame_notes = tk.Frame(frame_group, padx=8, pady=-1)

        # 选项
        frame_option = tk.Frame(frame_group)

        # 帧率/码率
        fps_option = RadiobuttonOption(frame_option,
                                       title=" 帧率(FPS) ",
                                       options=['保持', '24', '25', '30'],
                                       set=1)
        bit_option = RadiobuttonOption(
            frame_option,
            title=" 码率(Bitrate) ",
            options=["保持", '智能', '≥4m', '≥6m', '≥8m', '≥10m'],
            set=1)
        tips = "爱奇艺备案号生成的视频码率固定为8m\n" \
               "有时码率可能达不到,请注意检查!(视频原码率低或画面较简单时)"

        utils.tooltip(bit_option.get_frame(), tips, 500, 5000)

        frame_option_cb = tk.Frame(frame_group)
        cb_fix = tk.Checkbutton(frame_option_cb,
                                text="双倍时长修正",
                                fg=color,
                                variable=self.var_fix)
        cb_fast = tk.Checkbutton(frame_option_cb,
                                 text="极速模式",
                                 fg=color,
                                 variable=self.var_fast)
        cb_30m = tk.Checkbutton(frame_option_cb,
                                text="30m(MPG)",
                                fg=color,
                                variable=self.var_30m,
                                command=self.cb_30m_call)
        cb_shutdown = Shutdown(frame_option_cb)

        tips = "输出格式为“mpg”,且码率为30m\n" \
               "爱奇艺备案号也受此选项控制"
        utils.tooltip(cb_30m, tips, 500, 5000)

        # 开始按钮
        start_btn = Start(frame_bottom,
                          text='开始\n合成',
                          command=self.start_check,
                          width=80)

        # grid
        cb_fix.grid(column=2, row=2, sticky=tk.W)
        cb_30m.grid(column=3, row=2, sticky=tk.W)
        cb_shutdown.grid(column=4, row=2, sticky=tk.W)

        fps_option.grid(column=2, row=1, sticky=tk.W)
        bit_option.grid(column=3, row=1, sticky=tk.W)

        fc_pt.grid(column=1, row=1, sticky=tk.W)
        fc_pw.grid(column=1, row=2, sticky=tk.W)
        fc_fr.grid(column=1, row=3, sticky=tk.NW)
        fc_wm.grid(column=1, row=4, sticky=tk.NW)

        fc_number.grid(column=1, row=6, sticky=tk.NW)
        frame_option.grid(column=1, row=21, sticky=tk.NW)
        frame_option_cb.grid(column=1, row=22, sticky=tk.NW)
        fc_out.grid(column=1, row=25, sticky=tk.NW)

        start_btn.grid(column=1, row=1, sticky=tk.W)

        frame_top.grid(column=1, row=1, sticky=tk.NW)
        frame_center.grid(column=1, row=2, sticky=tk.NW)
        frame_file.grid(column=1, row=3, sticky=tk.NW)
        frame_group.grid(column=1, row=4, sticky=tk.NW)
        frame_bottom.grid(column=1, row=5, sticky=tk.NW)

        self.cb_fix = cb_fix
        self.cb_fast = cb_fast
        self.cb_30m = cb_30m
        self.fc_pt = fc_pt
        self.fc_pw = fc_pw
        self.fc_frame = fc_fr
        self.fc_watermark = fc_wm
        self.fc_number = fc_number
        self.fc_out = fc_out
        self.start_btn = start_btn
        self.cb_shutdown = cb_shutdown
        self.file_chooser = file_chooser
        self.fps_option = fps_option
        self.bit_rate_option = bit_option
        self.auto_select()
예제 #8
0
    def __init__(self):
        top_win = tk.Toplevel(utils.win)
        top_win.title('wifi连接')
        top_win.geometry(_win_pos)

        frame_top = tk.Frame(top_win)
        frame_top2 = tk.Frame(top_win)
        frame_list = tk.Frame(top_win)

        # 顶部输入框
        var_entry = tk.StringVar()
        var_entry2 = tk.StringVar()

        # 模拟器端口
        port = "7555" if utils.is_windows else "5555"
        serial1 = "127.0.0.1:{0}".format(port)
        serial2 = "127.0.0.1:{0}".format("62001")
        desc1 = "mumu模拟器"

        txt1 = tk.Label(frame_top, text='请输入设备的 IP 地址:')
        txt2 = tk.Label(frame_top, text='最近连接:', fg=theme.COLOR_GRAY)
        entry = tk.Entry(frame_top, textvariable=var_entry, width=28)
        entry.select_adjust(15)
        entry.focus()
        btn_connect = tk.Button(frame_top, text='连接', width=8)
        btn_serial1 = tk.Button(frame_top, text=desc1, width=40)
        btn_scan = tk.Button(frame_top, text='网络发现', width=8)

        entry.bind('<Return>', self.entry_call)
        btn_connect.bind('<Button-1>', self.connect_call)
        utils.bind(btn_serial1, self.emulator_call, False)
        utils.bind(btn_serial1, self.emulator_call, True)
        utils.tooltip(btn_serial1,  "左键 mumu模拟器 {0}\n右键 夜神模拟器 {1}".format(serial1, serial2))
        utils.bind(btn_scan, self.scan_call, False)
        utils.bind(btn_scan, self.scan_call, True)
        utils.tooltip(btn_scan, "左键扫描 开放5555端口的ip\n"
                                "右键扫描 开放7555端口的ip")

        # tree 配置
        # 列号,宽度,对齐,列名称
        config = [
            ["1", 140, "center", "名称"],
            ["2", 120, "nw", "IP"],
            ["3", 80, "center", "端口号"]
        ]
        names = []
        for c in config:
            names.append(c[0])
        tree = ttk.Treeview(frame_list, show="headings", selectmode=tk.EXTENDED, columns=names)
        tree.config(height=10)
        for c in config:
            tree.column(c[0], width=c[1], anchor=c[2])
            tree.heading(c[0], text=c[3])
        tree.tag_configure(self.ODD, background='#f5f5f5')
        tree.bind('<Button-1>', self.tree_call)
        tree.bind('<Double-1>', self.tree_double_call)

        y_scrollbar = ttk.Scrollbar(frame_list, orient=tk.VERTICAL, command=tree.yview)
        tree.config(yscrollcommand=y_scrollbar.set)
        self.i_name = 0
        self.i_ip = 1
        self.i_port = 2

        entry2 = tk.Entry(frame_top2, textvariable=var_entry2, width=28)
        rename = tk.Button(frame_top2, text='✏', width=2, command=self.rename_call)
        up = tk.Button(frame_top2, text='↑', width=2, command=self.up_call)
        down = tk.Button(frame_top2, text='↓', width=2, command=self.down_call)
        remove_btn = tk.Button(frame_top2, text='-', width=2, command=self.remove_call)
        entry2.bind('<Return>', self.entry2_call)

        utils.tooltip(rename, "更改设备名称\n支持输入框按enter键")

        txt1.grid(column=1, row=1, sticky=tk.NW)
        entry.grid(column=1, row=2, sticky=tk.E + tk.W)
        btn_serial1.grid(column=1, row=3, sticky=tk.NW)
        txt2.grid(column=1, row=4, sticky=tk.NW)

        btn_connect.grid(column=2, row=2)
        btn_scan.grid(column=2, row=3)

        tree.grid(column=1, row=2)
        y_scrollbar.grid(column=2, row=2, sticky=tk.N + tk.S)

        entry2.grid(column=2, row=3)
        rename.grid(column=3, row=3)
        up.grid(column=4, row=3)
        down.grid(column=5, row=3)
        remove_btn.grid(column=6, row=3)

        frame_top.grid(column=1, row=1)
        frame_list.grid(column=1, row=2, sticky=tk.NW)
        frame_top2.grid(column=1, row=3, sticky=tk.EW)

        utils.set_groove((btn_connect, btn_serial1, btn_scan, up, down, remove_btn))
        # utils.win.call('focus', '-force', entry)

        top_win.protocol("WM_DELETE_WINDOW", self.on_closing)

        self.top_win = top_win
        self.frame_top = frame_top
        self.entry = entry
        self.var_entry = var_entry
        self.var_entry2 = var_entry2
        self.btn_connect = btn_connect
        self.btn_emulator1 = btn_serial1
        self.widget_arr = []
        self.serial1 = serial1
        self.serial2 = serial2
        self.tree = tree
        self.auto_select()
예제 #9
0
    def manual_int(self):
        if self.is_manual_int:
            return
        self.is_manual_int = True
        win = self.win

        self.win = None

        frame_btn = tk.Frame(win, bd=1)
        frame_msg = tk.Frame(win)
        frame_content = tk.Frame(win)

        frame_device = tk.Frame(frame_content)

        color = util_theme.COLOR_BLACK

        def init_btn(text, width=8):
            btn = tk.Button(frame_btn, text=text, width=width, fg=color)
            btn.bind("<Button-1>", self.btn_click)
            utils.set_groove((btn, ))
            return btn

        btn_refresh = init_btn('刷新设备列表', 10)
        btn_wifi = init_btn('Wifi调试')
        btn_apk = init_btn('apkinfo')
        btn_folder = init_btn('定位截图')
        btn_remote = init_btn('遥控器')
        btn_setting = init_btn('✿设置')

        utils.bind(btn_refresh, self.btn_click, True)
        utils.bind(btn_wifi, self.btn_click, True)
        utils.bind(btn_apk, self.btn_click, True)

        # 设置tooltip
        utils.tooltip(btn_refresh, "右键单击可强制刷新", 300, 3000)

        cbb = ttk.Combobox(frame_btn, width=10, justify='center')
        cbb.bind("<<ComboboxSelected>>", self.cbb_call)
        utils.tooltip(cbb, '选择下拉项即执行操作')
        # 配置下拉项
        c = [['base64 转图片', self.OP_B64_IMG], ['图片转 base64', self.OP_IMG_B64]]
        values = []
        types = []
        for arr in c:
            values.append(arr[0])
            types.append(arr[1])
        cbb['values'] = tuple(values)
        cbb.current(0)
        self.cbb = cbb
        self.cbb_ops = types

        # 提示框
        w = 70 if utils.is_windows else 60
        label_msg = tk.Label(frame_msg,
                             width=w,
                             fg=color,
                             justify='left',
                             anchor="nw")
        utils.label_msg = label_msg

        btn_wifi.grid(column=1, row=1)
        btn_refresh.grid(column=2, row=1)
        btn_apk.grid(column=3, row=1)
        btn_folder.grid(column=4, row=1)
        btn_remote.grid(column=5, row=1)
        # cbb.grid(column=5, row=1)
        btn_setting.grid(column=6, row=1)

        label_msg.grid(column=1, row=2, sticky=tk.NW)

        frame_device.grid(column=2, row=1, sticky=tk.NW)

        frame_btn.grid(column=1, row=1, sticky=tk.NW)
        frame_msg.grid(column=1, row=2, sticky=tk.NW)
        frame_content.grid(column=1, row=3, sticky=tk.NW)

        # menu = tk.Menu(win)
        # for i in ('One', 'Two', 'Three'):
        #     menu.add_command(label=i)
        # if (win.tk.call('tk', 'windowingsystem') == 'aqua'):
        #     win.bind('<2>', lambda e: menu.post(e.x_root, e.y_root))
        #     print('<2>')
        #     win.bind('<Control-1>', lambda e: menu.post(e.x_root, e.y_root))
        # else:
        #     win.bind('<3>', lambda e: menu.post(e.x_root, e.y_root))
        #     print('<3>')

        utils.main = self

        self.btn_refresh = btn_refresh
        self.btn_wifi = btn_wifi
        self.btn_apk = btn_apk
        self.btn_folder = btn_folder
        self.btn_remote = btn_remote
        self.btn_setting = btn_setting
        self.frame_device = frame_device
        self.show_devices()
예제 #10
0
 def set_cb_tooltip(self, tips, delay=500, duration=3000):
     if self.cb is not None:
         utils.tooltip(self.cb, tips, delay, duration)
예제 #11
0
    def __init__(self, _parent):
        IPanel.__init__(self, _parent)
        frame = self.frame

        self.th = utils.thread_func
        self.msg = util_atool.show_msg

        # frame = tk.LabelFrame(_parent, text=' 指令列表 ', fg=util_theme.COLOR_GRAP2, borderwidth=1, padx=4, pady=4)

        # 包名下拉框
        btn_frame = tk.Frame(frame)
        cbb_item = PackageCombobox(frame)

        cbb = ttk.Combobox(btn_frame,
                           width=18,
                           state='readonly',
                           height=20,
                           justify='center')
        cbb.bind("<<ComboboxSelected>>", self.cbb_call)
        # utils.tooltip(cbb, '选择下拉项即执行操作')
        utils.tooltip(cbb, '选择下拉项改变按钮功能')

        btn = tk.Button(btn_frame,
                        text="Go",
                        width=12,
                        fg=util_theme.COLOR_BLACK)
        utils.bind(btn, self.btn_call)
        utils.bind(btn, self.btn_call, True)

        frame_btn_group = tk.Frame(btn_frame)
        # btn_am = tk.Button(frame_btn_group, text="应用管理", width=6)
        btn_screen = tk.Button(frame_btn_group, text="截屏", width=6)
        btn_install = tk.Button(frame_btn_group, text="安装", width=6)
        btn_log = tk.Button(frame_btn_group, text="日志", width=6)
        # utils.bind(btn_am, self.btn_group_call)
        # utils.bind(btn_am, self.btn_group_call, True)
        utils.bind(btn_screen, self.btn_group_call)
        utils.bind(btn_screen, self.btn_group_call, True)
        utils.bind(btn_install, self.btn_group_call)
        utils.bind(btn_install, self.btn_group_call, True)
        utils.bind(btn_log, self.btn_group_call)
        utils.bind(btn_log, self.btn_group_call, True)

        utils.tooltip(btn_screen, "左键截屏并自动打开图片\n右键截屏不自动打开图片", 800)
        utils.tooltip(btn_install, "左键点击 安装\n右键点击 安装剪贴板里的apk", 800)
        utils.tooltip(btn_log, "左键获取日志\n右键清除日志", 800)

        utils.set_groove((btn, btn_screen, btn_install, btn_log))

        # btn_am.grid(column=1, row=1, sticky=tk.NW)
        btn_screen.grid(column=2, row=1, sticky=tk.NW)
        btn_install.grid(column=3, row=1, sticky=tk.NW)
        btn_log.grid(column=4, row=1, sticky=tk.NW)

        cbb.grid(column=1, row=1, sticky=tk.NW)
        btn.grid(column=2, row=1, sticky=tk.NW)
        tk.Label(btn_frame, width='4').grid(column=3, row=1, sticky=tk.NW)
        frame_btn_group.grid(column=4, row=1)

        # cbb_item.grid(1, 2, tk.NW)
        btn_frame.grid(column=1, row=1, sticky=tk.NW)

        self.btn = btn
        self.cbb_item = cbb_item
        self.cbb = cbb
        self.cbb_ops = None
        # self.btn_am = btn_am
        self.btn_screen = btn_screen
        self.btn_install = btn_install
        self.btn_log = btn_log
예제 #12
0
    def cbb_call(self, _):
        index = self.cbb.current()
        op = self.cbb_ops[index]
        if op == OP.SEPARATOR:
            s = ''
        else:
            s = self.cbb.get()

        tips = "点击执行 " + s

        if op == OP.INSTALL:
            tips = "左键点击 " + s
            tips += "\n右键点击 安装剪贴板里的apk"

        elif op == OP.AM_LIST:
            tips = "成功后将拷贝到剪贴板, 请粘贴后使用!\n" \
                   "左键点击 读取用户安装的应用信息," + s
            tips += "\n右键点击 获取全部的应用信息"

        elif op == OP.CLEAR:
            tips = "左键点击 " + s
            tips += "\n右键点击 清除数据并启动应用"

        elif op == OP.SCREEN_SHOT:
            tips = "左键点击 " + s
            tips += "\n右键点击 截图 不自动打开截图文件"

        elif op == OP.SIZE_CUSTOM:
            tips = "左键点击 更改至自定义的分辨率" \
                   "\n右键点击 查询当前配置信息" \
                   "\n前往设置界面单独设置 宽x高 和 DPI 信息"

        elif op == OP.SIZE_SCALE:
            tips = "左键点击 2倍"
            tips += "\n右键点击 3倍"

        elif op == OP.SIZE_ORIGINAL:
            tips = "左键点击 " + s
            tips += "\n右键点击 查询当前分辨率信息"

        elif op == OP.DEBUG_LAYOUT:
            tips = "左键点击 显示布局边界"
            tips += "\n右键点击 关闭布局边界"

        elif op == OP.ACTIVITY_CUR_RUN:
            tips = "左键点击 " + s
            tips += "\n右键点击 仅获取前台运行程序的包名"

        elif op == OP.CLIPPER:
            tips = "左键点击 发送文本到安卓剪贴板" \
                   "\n右键点击 获取安卓剪贴板的文本" \
                   "\n备注:1.支持输入中文,但不支持空格等特殊符号" \
                   "\n2.’此功能需要设备上安装 Clipper 才能使用" \
                   "\nhttps://github.com/majido/clipper/releases"

        elif op == OP.STOP:
            tips = "左键点击 {} (指定包名的)".format(s)
            tips += "\n右键点击 {} (正在运行的)".format(s)

        elif op == OP.PULL_APK:
            # 下载apk
            tips = "左键点击 {} (指定包名的)".format(s)
            tips += "\n右键点击 {} (正在运行的)".format(s)

        elif op == OP.UNINSTALL:
            # 卸载应用
            tips = "左键点击 {}".format(s)
            tips += "\n右键点击 {} (保留数据)".format(s)

        elif op == OP.RUN:
            # 启动应用
            tips = "左键点击 {}".format(s)
            tips += "\n右键点击 重启正在运行的应用".format(s)

        elif op == OP.SCRCPY:
            arr_win = [
                "设备 BACK 键 Ctrl+B | 鼠标右键", "设备 HOME 键 Ctrl+H | 鼠标中键",
                "设备 任务管理 键 (切换APP) Ctrl+S", "设备 菜单 键 Ctrl+M", "设备音量+键 Ctrl+↑",
                "设备音量-键 Ctrl+↓", "设备电源键 Ctrl+P", "复制内容到设备 Ctrl+V",
                "点亮手机屏幕 鼠标右键", "安装APK 将 apk 文件拖入投屏", "传输文件到设备 将文件拖入投屏(非apk)"
            ]
            arr_mac = [
                "设备 BACK 键 ⌘+B | 鼠标右键", "设备 HOME 键 Ctrl+H | 鼠标中键",
                "设备 任务管理 键 (切换APP) ⌘+S", "设备 菜单 键 Ctrl+M", "设备音量+键 ⌘+↑",
                "设备音量-键 ⌘+↓", "设备电源键 ⌘+P", "复制内容到设备 ⌘+V", "点亮手机屏幕 鼠标右键",
                "安装APK 将 apk 文件拖入投屏", "传输文件到设备 将文件拖入投屏(非apk)"
            ]
            arr = arr_win if utils.is_windows else arr_mac
            tips = "左键点击 " + s
            tips += "\n\nscrcpy操作说明:\n" + "\n".join(arr)

        utils.tooltip(self.btn, tips, 800)
        if op[0:6] == "_need_":
            self.grid_cbb_package()
        else:
            self.grid_cbb_package(False)
예제 #13
0
 def cbb_current(self, _index):
     """选中一个下拉项"""
     self.cbb.current(_index)
     s = self.cbb.get()
     utils.tooltip(self.btn, "点击执行 " + s, 800)
예제 #14
0
파일: tap_app.py 프로젝트: hufang360/fftool
    def manual_int(self):
        if self.is_manual_int:
            return
        self.is_manual_int = True
        win = self.win

        # 颜色
        color = util_theme.COLOR_BLACK

        frame_file = tk.Frame(win)
        frame_group = tk.Frame(win)
        frame_check = tk.Frame(win)
        frame_wm = tk.Frame(win)
        frame_out = tk.Frame(win)
        frame_start = tk.Frame(win)

        if utils.is_windows:
            w_arr = [30, 60, 192, 150 + 240, 70]
        else:
            w_arr = [50, 60, 220, 240 + 240, 70]
        file_chooser = TreeViewNew(
            frame_file,
            tree_num=15,
            file_types=[("视频文件", "*.mp4"), ("QuickTime", "*.mov"),
                        ("avi", "*.avi"), ("mkv", "*.mkv"), ("mpg", "*.mpg"),
                        ("ts", "*.ts")],
            paste_notice=';-) 点我 粘贴媒体文件, 支持mp4、mov、avi、mkv、mpg、ts格式',
            tree_widths=w_arr,
            has_list_btn=True)
        # 选项
        lf_size = tk.LabelFrame(frame_group,
                                padx=8,
                                pady=4,
                                text=' 分辨率 ',
                                width=300,
                                borderwidth=1)
        lf_tune = tk.LabelFrame(frame_group,
                                padx=8,
                                pady=4,
                                text=' 画面优化 ',
                                borderwidth=1)
        lf_format = tk.LabelFrame(frame_group,
                                  padx=8,
                                  pady=4,
                                  text=' 输出格式 ',
                                  width=200,
                                  borderwidth=1)

        cb_size1 = tk.Checkbutton(lf_size,
                                  text="流畅 (640x360)",
                                  variable=self.cb_size_var1)
        cb_size2 = tk.Checkbutton(lf_size,
                                  text="高清 (1280x720)",
                                  variable=self.cb_size_var2)
        cb_size1.select()
        cb_size2.select()

        cb_tune1 = tk.Checkbutton(lf_tune,
                                  text="动画类 (亲宝儿歌)",
                                  variable=self.cb_tune_var1)
        cb_tune2 = tk.Checkbutton(lf_tune,
                                  text="实拍类 (舞蹈学堂)",
                                  variable=self.cb_tune_var2)
        cb_tune1.select()
        cb_tune1.bind("<Button-1>", self.tune_cb_call)
        cb_tune2.bind("<Button-1>", self.tune_cb_call)

        cb_format1 = tk.Checkbutton(lf_format,
                                    text=" mp4  ",
                                    variable=self.cb_format_var1)
        cb_format2 = tk.Checkbutton(lf_format,
                                    text=" flv ",
                                    variable=self.cb_format_var2)
        cb_format3 = tk.Checkbutton(lf_format,
                                    text=" m3u8 ",
                                    variable=self.cb_format_var3)
        cb_format4 = tk.Checkbutton(lf_format,
                                    text=" ts(电信) ",
                                    variable=self.cb_format_var4)
        cb_format5 = tk.Checkbutton(lf_format,
                                    text=" ts(移动) ",
                                    variable=self.cb_format_var5)
        cb_format1.select()
        cb_format3.bind("<Button-1>", self.format_cb_call)
        cb_format4.bind("<Button-1>", self.format_cb_call)
        cb_format5.bind("<Button-1>", self.format_cb_call)

        utils.tooltip(cb_format4, "电信渠道的ts文件,分辨率统一为 1280x720", 100, 2000)
        utils.tooltip(cb_format5, "移动渠道的ts文件,分辨率统一为 1280x720", 100, 2000)

        fc_number = FileChooser(frame_wm,
                                cb_text="加备案号",
                                filetypes=[("图片文件", "*.png")],
                                action_btn_text='浏览…',
                                hasGROOVE=False)

        cb_fix = tk.Checkbutton(frame_check,
                                text="双倍时长修正",
                                fg=color,
                                variable=self.var_fix)
        cb_ratio = tk.Checkbutton(frame_check,
                                  text="黑边视频",
                                  fg=color,
                                  variable=self.keep_ratio_var)
        cb = tk.Checkbutton(frame_check,
                            text="保留上层目录",
                            fg=color,
                            variable=self.keep_parent_var)

        fc_number.set_cb_tooltip("目前仅支持 ts(电信)和ts(移动)转码方案", 100, 2000)
        utils.tooltip(cb_fix, "目前仅支持 ts(电信)和ts(移动)转码方案", 100, 2000)
        utils.tooltip(cb_ratio, "目前仅支持 ts(电信)和ts(移动)转码方案", 100, 2000)

        # 自动关机
        self.item_shutdown = Shutdown(frame_check)

        # 输出目录
        self.fc_out = FileChooser(frame_out,
                                  label_text="输出:",
                                  action_btn_text='浏览…',
                                  isFolder=True,
                                  hasGROOVE=True,
                                  text_width=86)

        # 开始转码 按钮
        self.start_btn = Start(frame_start,
                               text='转码',
                               command=self.start_check)
        self.start_btn.grid(column=1, row=1, sticky=tk.W)

        cb_size1.grid(column=1, row=1, sticky=tk.N + tk.S + tk.W)
        cb_size2.grid(column=1, row=2, sticky=tk.N + tk.S + tk.W)
        cb_tune1.grid(column=1, row=1, sticky=tk.N + tk.S + tk.W)
        cb_tune2.grid(column=1, row=2, sticky=tk.N + tk.S + tk.W)
        cb_format1.grid(column=1, row=1, sticky=tk.N + tk.S + tk.W)
        cb_format2.grid(column=2, row=1, sticky=tk.N + tk.S + tk.W)
        cb_format3.grid(column=3, row=1, sticky=tk.N + tk.S + tk.W)
        cb_format4.grid(column=1, row=2, sticky=tk.N + tk.S + tk.W)
        cb_format5.grid(column=2, row=2, sticky=tk.N + tk.S + tk.W)

        lf_size.grid(column=2, row=1)
        lf_tune.grid(column=3, row=1)
        lf_format.grid(column=1, row=1, sticky=tk.N + tk.S + tk.W)

        fc_number.grid(column=1, row=1, sticky=tk.N + tk.S + tk.W)

        cb_fix.grid(column=1, row=2, sticky=tk.W)
        cb_ratio.grid(column=2, row=2, sticky=tk.W)
        cb.grid(column=3, row=2, sticky=tk.W)
        self.item_shutdown.grid(column=4, row=2, sticky=tk.W)

        self.fc_out.grid(column=0, row=0, sticky=tk.NW)

        frame_file.grid(column=1, row=1, sticky=tk.N + tk.S + tk.W)
        frame_group.grid(column=1, row=2, sticky=tk.N + tk.S + tk.W)
        frame_wm.grid(column=1, row=3, sticky=tk.N + tk.S + tk.W)
        frame_check.grid(column=1, row=4, sticky=tk.N + tk.S + tk.W)
        frame_out.grid(column=1, row=5, sticky=tk.N + tk.S + tk.W)
        frame_start.grid(column=1, row=6, sticky=tk.N + tk.S + tk.W)

        self.cb_size1 = cb_size1
        self.cb_size2 = cb_size2
        self.cb_tune1 = cb_tune1
        self.cb_tune2 = cb_tune2
        self.cb_format1 = cb_format1
        self.cb_format2 = cb_format2
        self.cb_format3 = cb_format3
        self.cb_format4 = cb_format4
        self.cb_format5 = cb_format5
        self.file_chooser = file_chooser
        self.fc_number = fc_number
        self.auto_select()
예제 #15
0
    def __init__(self, parent, **kw):
        frame = parent
        color_black = util_theme.COLOR_BLACK

        # **kw
        key = 'file_types'
        self.file_types = kw[key] if key in kw else [
            ("文件", "*.*"),
        ]

        key = 'tree_num'
        tree_num = kw[key] if key in kw else 20

        key = 'paste_notice'
        self.smart_notice = kw[key] if key in kw else ' ;-) 右键点我 粘贴文件'

        key = 'tree_widths'
        tree_widths = kw[key] if key in kw else []

        key = 'has_list_btn'
        has_list_btn = kw[key] if key in kw else False

        # 补齐格式
        arr = []
        for t in self.file_types:
            if len(t) >= 2:
                arr.append(t[1].replace("*", ""))
        self.file_types_tup = tuple(arr)

        # 补齐宽度
        if utils.is_mac:
            w_arr = [50, 100, 220, 420, 70]
        else:
            w_arr = [30, 70, 192, 370, 70]
        for i in range(len(w_arr)):
            if len(tree_widths) - 1 < i:
                tree_widths.append(w_arr[i])

        frame_top = tk.Frame(frame)
        frame_center = tk.Frame(frame)

        # 导入文件 / ↑ / ↓ / - /+
        import_btn = tk.Button(frame_top, text='导入文件', width=14)
        import_dir_btn = tk.Button(frame_top, text='导入目录', width=8)
        import_list_btn = tk.Button(frame_top, text='↺', width=2)

        import_btn.bind("<Button-1>", self.import_call)
        import_dir_btn.bind("<Button-1>", self.import_call)
        import_list_btn.bind("<Button-1>", self.import_call)

        w = 101 - 12 - 10 if utils.is_mac else 62
        tf = setting_fftool.font_default
        smart_paste = tk.Label(frame_top,
                               padx=8,
                               bd=0,
                               height=1,
                               width=w,
                               fg=color_black,
                               font=tf)
        smart_paste['text'] = self.smart_notice
        utils.bind(smart_paste, self.paste_right_click, True)
        tips = "右键单击此处可以粘贴哦!"
        utils.tooltip(smart_paste, tips, 100, 6000)

        up = tk.Button(frame_top, text='↑', width=2, command=self.up_call)
        down = tk.Button(frame_top, text='↓', width=2, command=self.down_call)
        remove_btn = tk.Button(frame_top,
                               text='-',
                               width=2,
                               command=self.remove_call)
        add_btn = tk.Button(frame_top,
                            text='+',
                            width=2,
                            command=self.add_call)

        import_btn.grid(column=1, row=0)
        import_dir_btn.grid(column=2, row=0)
        if has_list_btn:
            import_list_btn.grid(column=3, row=0)
        smart_paste.grid(column=4, row=0)
        up.grid(column=11, row=0)
        down.grid(column=12, row=0)
        remove_btn.grid(column=13, row=0)
        add_btn.grid(column=14, row=0)

        # 设置tooltip
        utils.tooltip(import_list_btn, "恢复上次的文件列表", 300, 3000)

        # treeview
        self.tree = TreeView(frame_center,
                             tree_num=tree_num,
                             tree_widths=tree_widths)

        w = (frame_top, frame_center, import_btn, import_list_btn,
             import_dir_btn, up, down, remove_btn, add_btn)
        utils.set_groove(w)

        frame_top.grid(column=1, row=1, sticky=tk.NW)
        frame_center.grid(column=1, row=2, sticky=tk.NW)

        self.paste = smart_paste
        self.import_btn = import_btn
        self.import_list_btn = import_list_btn
        self.import_dir_btn = import_dir_btn
        self.up = up
        self.down = down
        self.remove_btn = remove_btn
        self.add_btn = add_btn
예제 #16
0
    def __init__(self, _parent, **kw):
        IPanel.__init__(self, _parent)
        frame = self.frame

        label_text = kw['label_text'] if 'label_text' in kw else ''
        cb_text = kw['cb_text'] if 'cb_text' in kw else ''
        cb_call = kw['cb_call'] if 'cb_call' in kw else None
        btn_text = kw['btn_text'] if 'btn_text' in kw else ''
        btn_call = kw['connect_call'] if 'connect_call' in kw else None
        action_btn_text = kw[
            'action_btn_text'] if 'action_btn_text' in kw else '...'
        action_btn_call = kw[
            'action_btn_call'] if 'action_btn_call' in kw else None
        file_types = kw['filetypes'] if 'filetypes' in kw else []
        is_folder = kw['isFolder'] if 'isFolder' in kw else False
        text_width = kw['text_width'] if 'text_width' in kw else 80

        # 颜色
        color = util_theme.COLOR_BLACK
        wrap_length = 780

        font_name = '微软雅黑' if utils.is_windows else ''
        font_size = 7 if utils.is_windows else 12

        self.cb_call = cb_call
        has_check = False
        if label_text:
            self.label_txt = tk.Label(frame, text=label_text, fg=color)
            self.label_txt.grid(column=1, row=1, sticky=tk.W)

        # 勾选框 形式
        elif cb_text:
            self.var_cb = tk.IntVar()
            cb = tk.Checkbutton(frame,
                                text=cb_text,
                                variable=self.var_cb,
                                fg=color,
                                command=self.checkbox_call)
            cb.grid(column=1, row=1, sticky=tk.W)

            self.cb = cb
            has_check = True

        # 按钮 形式
        elif btn_text:
            btn = tk.Button(frame, text=btn_text, fg=color)
            if btn_call:
                btn.config(command=btn_call)
                utils.tooltip(btn, "点击打开目录", 100, 2000)
            btn.grid(column=1, row=1, sticky=tk.W)
            self.btn = btn
            utils.set_groove((btn, ))

        # 文件路径
        txt = tk.Label(frame, text='')
        txt.config(width=text_width,
                   height=1,
                   bd=1,
                   padx=3,
                   fg=color,
                   wraplength=wrap_length,
                   justify='left',
                   anchor='w')
        txt.grid(column=2, row=1)

        # 选择文件按钮
        action_btn = tk.Button(frame,
                               text=action_btn_text,
                               fg=color,
                               font=(font_name, font_size),
                               state=tk.DISABLED)
        if len(file_types):
            action_btn.config(command=self.open_file_call)
            utils.bind(action_btn, self.right_click_call, True)
            self.filetypes = file_types
        self.action_btn_call = action_btn_call
        if is_folder:
            action_btn.config(command=self.open_folder_call, state=tk.NORMAL)
            utils.bind(action_btn, self.right_click_call, True)

        utils.tooltip(action_btn, "左键点击 选择文件/目录\n右键点击 前往对应文件/目录", 100, 2000)

        action_btn.grid(column=3, row=1)

        tup = (frame, action_btn)
        utils.set_groove(tup)

        self.txt = txt
        self.action_btn = action_btn
        self.hasCheck = has_check
        self.is_folder = is_folder
예제 #17
0
    def __init__(self, apk):
        top_win = tk.Toplevel(utils.win)
        top_win.title('apk信息查看器')
        # top_win.geometry('200x200')
        # top_win.bind("<Destroy>", self.destroyed)

        color = util_theme.COLOR_BLACK

        frame_top = tk.Frame(top_win, padx=2, pady=2)
        frame_content = tk.Frame(top_win, padx=2, pady=2)

        bind = utils.bind
        btn_browse = tk.Button(frame_top, text='选择apk', fg=color, width=10)
        bind(btn_browse, self.btn_call)
        bind(btn_browse, self.btn_call, True)
        utils.tooltip(btn_browse, "左键点击 选择一个apk文件\n右键点击 读取剪贴板中的文件")

        frame_rename = tk.Frame(frame_top)
        btn_rename1 = tk.Button(frame_rename, text='应用名', width=6, fg=color)
        btn_rename2 = tk.Button(frame_rename, text='包名', width=6, fg=color)
        btn_rename3 = tk.Button(frame_rename, text='渠道名', width=6, fg=color)
        bind(btn_rename1, self.rename_call)
        bind(btn_rename2, self.rename_call)
        bind(btn_rename3, self.rename_call)
        bind(btn_rename1, self.rename_right_call, True)
        bind(btn_rename2, self.rename_right_call, True)
        bind(btn_rename3, self.rename_right_call, True)

        # labelframe
        label_frame_base = tk.LabelFrame(frame_content,
                                         text=' 基本 ',
                                         borderwidth=1)
        label_frame_sign = tk.LabelFrame(frame_content,
                                         text=' 签名、文件 ',
                                         borderwidth=1)
        label_frame_per = tk.LabelFrame(frame_content,
                                        text=' 权限 ',
                                        borderwidth=1)

        icon_frame = tk.Frame(label_frame_base, padx=0, pady=0)
        icon_left = tk.Frame(icon_frame, padx=0, pady=0)
        icon_right = tk.Frame(icon_frame, padx=0, pady=0)

        # label item
        config = [
            [icon_left, "名称", 0, 30, 1, 1],
            [icon_left, "包名", 0, 30, 1, 2],
            [icon_left, "版本号", 0, 30, 1, 3],
            [icon_left, "内部版本号", 0, 30, 1, 4],
            [icon_left, "友盟渠道", 0, 30, 1, 5],
            [icon_left, "友盟appkey", 0, 30, 1, 6],
            [label_frame_base, "min_sdk", 0, 55, 1, 2],
            [label_frame_base, "target_sdk", 0, 55, 1, 3],
            [label_frame_sign, "签名MD5", 0, 55, 1, 1],
            [label_frame_sign, "签名SHA1", 0, 55, 1, 2],
            [label_frame_sign, "签名SHA256", 0, 55, 1, 3],
            [label_frame_sign, "文件地址", 0, 55, 1, 4],
            [label_frame_sign, "文件大小", 0, 55, 1, 5],
            [label_frame_sign, "文件MD5", 0, 55, 1, 6],
        ]
        obj_arr = []
        for arr in config:
            col = arr[4]
            row = arr[5]
            obj = LabelItem(arr[0], name=arr[1], value_width=arr[3])
            obj.grid(column=col, row=row, sticky=tk.NW)
            obj_arr.append(obj)

        # icon
        m_icon = IconItem(icon_right)

        # 权限文本框
        m_entry = tk.Text(label_frame_per,
                          height=9,
                          width=65,
                          fg=color,
                          bd=1,
                          wrap=tk.WORD,
                          highlightthickness=1,
                          highlightcolor=util_theme.COLOR_GRAY,
                          font=util_theme.get_small_format())

        btn_browse.grid(column=1, row=1)
        tk.Label(frame_top, width=19).grid(column=2, row=1)
        frame_rename.grid(column=3, row=1)

        btn_rename1.grid(column=2, row=1)
        btn_rename2.grid(column=3, row=1)
        btn_rename3.grid(column=4, row=1)

        label_frame_base.grid(column=1, row=1, sticky=tk.N + tk.S + tk.W)
        label_frame_sign.grid(column=1, row=2, sticky=tk.N + tk.S + tk.W)
        label_frame_per.grid(column=1, row=4, sticky=tk.N + tk.S + tk.W)
        m_icon.grid(column=1, row=1)
        m_entry.grid(column=1, row=1, sticky=tk.N + tk.S + tk.W)

        icon_left.grid(column=1, row=1, sticky=tk.N + tk.S + tk.W)
        icon_right.grid(column=2, row=1, sticky=tk.N + tk.S + tk.W)
        icon_frame.grid(column=1, row=1, sticky=tk.N + tk.S + tk.W)

        frame_top.grid(column=1, row=1, sticky=tk.W)
        frame_content.grid(column=1, row=2)

        self.m_name = obj_arr[0]
        self.m_package = obj_arr[1]
        self.m_ver = obj_arr[2]
        self.m_ver_inner = obj_arr[3]
        self.m_um_channel = obj_arr[4]
        self.m_um_key = obj_arr[5]
        self.m_min_sdk = obj_arr[6]
        self.m_target_sdk = obj_arr[7]

        self.m_sign_md5 = obj_arr[8]
        self.m_sign_sha1 = obj_arr[9]
        self.m_sign_sha256 = obj_arr[10]

        self.m_apk_path = obj_arr[11]
        self.m_apk_size = obj_arr[12]
        self.m_apk_md5 = obj_arr[13]

        self.m_entry = m_entry

        utils.set_groove((btn_browse, btn_rename1, btn_rename2, btn_rename3))

        self.m_icon = m_icon
        self.top_win = top_win
        self.btn_browse = btn_browse
        self.btn_rename1 = btn_rename1
        self.btn_rename2 = btn_rename2
        self.btn_rename3 = btn_rename3
        self.destroy_arr = [frame_top, frame_content, btn_browse]

        self.__update_tips()

        #  如果定义了 apk 地址
        if os.path.exists(apk):
            self.__show_info(apk)
예제 #18
0
 def set_text(self, text):
     """设置文本框上的内容
     """
     self.txt['text'] = text
     tips = text if os.path.exists(text) else text + "\n*此文件不存在!"
     utils.tooltip(self.txt, tips)
예제 #19
0
 def set_tips(self, tips):
     if self.pre_img is not None:
         utils.tooltip(self.pre_img, tips)