1

因此,我正在编写一个脚本,该脚本使用 pyautogui 启动网络浏览器,然后转到将打印多个 pdf 的特定页面。然而,在它打印之前,它会弹出一个简单的对话框并要求输入一个整数,所以它知道重复打印循环多少次。目前脚本可以工作,但我想让当 simpledialogbox 弹出时,它会从网页中获取焦点,因此用户只需输入他们的号码并按 Enter。

为了简单起见,我创建了一个简单的脚本来启动记事本,并以相同的方式请求一个整数,然后重复一个简单的 while 循环。这说明了我的问题,但也大大减少了你们需要整理的代码量。

免责声明 - 由于我的 tkinter 窗口已经打开,我可以很容易地看到 simpledialogbox,问题是焦点滞后和只输入数字的能力。

提前谢谢,请不要只是关闭我的问题。

from tkinter import simpledialog
import tkinter as tk
import pyautogui
import time


master = tk.Tk()
master.geometry("300x100+1620+0")


master.lift()
master.attributes('-topmost',True)


def move_mouse():
    pyautogui.hotkey("win")
    time.sleep(2)
    pyautogui.typewrite("notepad")
    time.sleep(2)
    pyautogui.hotkey("enter")
    time.sleep(2)
    pyautogui.hotkey("win", "up")
    time.sleep(2)
    count = 0
    number = simpledialog.askinteger("Input", "How many rotations of the while loop? ",
                                   parent=master, minvalue=0, maxvalue=10)
    time.sleep(2)
    pyautogui.moveTo(900, 500)
    pyautogui.click()
    while count <= number-1:
        pyautogui.typewrite("notepad")
        time.sleep(1)
        pyautogui.hotkey("enter")
        time.sleep(1)
        count = count + 1


test_button = tk.Button(master, text="Test", command=move_mouse)
test_button.pack()

      
master.mainloop()

更新:所以我得到了两个建议,一个来自这里,一个来自 Reddit。堆栈:root.update_idletasks() Reddit:master.focus_force()

两者都在我的简单对话框之前被调用,并且它们都适用于我的虚拟脚本,但是我实际上需要在完整脚本中调用 chrome 而不是记事本。这是我的一个错误,当我打电话给 chrome 时,这些建议都没有奏效。然后我搞砸了一点,并试图调用两次焦点,这奏效了......我不知道为什么!无论如何,这是我最后的工作代码,可以自由评论。

from tkinter import simpledialog
import tkinter as tk
import pyautogui
import time


master = tk.Tk()
master.geometry("300x100+1620+0")


master.lift()
master.attributes('-topmost',True)


sleep_time = 2


def launch_meebook():
    pyautogui.press("win")
    pyautogui.typewrite("chrome")
    time.sleep(sleep_time)
    pyautogui.press("enter")
    time.sleep(sleep_time)
    pyautogui.hotkey("win", "up")
    pyautogui.typewrite("https://app.meebook.com/arsplaner/")
    pyautogui.press("enter")
    time.sleep(sleep_time)
    pyautogui.moveTo(1240, 520)
    pyautogui.click()
    pyautogui.moveTo(1850, 50)
    master.focus_force()
    master.focus_force()

    
def rotation():
    count = 0
    y = 260
    antal = simpledialog.askinteger("Input", "Hvor mange årsplaner er der på siden? ",
                                   parent=master, minvalue=0, maxvalue=10)
    pyautogui.moveTo(1885, 785)
    pyautogui.click()
    while count <= antal-1:
        pyautogui.press('pageup')
        pyautogui.press('down')
        pyautogui.press('down')
        pyautogui.press('down')
        pyautogui.press('down')
        pyautogui.press('down')
        pyautogui.press('down')
        pyautogui.press('down')
        pyautogui.press('down')
        #Move cursor plan and click it
        pyautogui.moveTo(750, y)
        pyautogui.click()
        time.sleep(sleep_time)
        #Call printer and press print
        pyautogui.hotkey("ctrl", "p")
        time.sleep(sleep_time)
        pyautogui.moveTo(1470, 895)
        #pyautogui.click()
        pyautogui.press("esc")
        time.sleep(sleep_time)
        pyautogui.moveTo(960, 270)
        pyautogui.click()
        time.sleep(sleep_time)
        count = count + 1
        y = y + 65


def test():
    launch_meebook()
    rotation()
    time.sleep(sleep_time)
    pyautogui.hotkey("alt", "f4")


rotation_button = tk.Button(master, text="Print årsplaner", command=rotation)
rotation_button.pack()


launch_meebook_button = tk.Button(master, text="Gå til Meebook.com/arsplaner", command=launch_meebook)
launch_meebook_button.pack()


test_button = tk.Button(master, text="Test", command=test)
test_button.pack()

      
master.mainloop()
4

1 回答 1

2

你需要提前打电话update_idletasks

from tkinter import *
from tkinter import simpledialog

root = Tk()
root.update_idletasks()
number = simpledialog.askinteger("Input", "How many rotations of the while loop? ",
                                 parent=root, minvalue=0, maxvalue=10)


root.mainloop()
于 2020-08-07T20:32:35.087 回答