【问题标题】:how to bring a set up window before printing in win32api?如何在win32api中打印之前设置一个窗口?
【发布时间】:2023-03-28 03:59:01
【问题描述】:

有什么方法可以在win32api打印之前带一个设置页面?

代码如下:

from tkinter import *
from tkinter import filedialog
from tkinter import messagebox
import win32api

root = Tk()
root.geometry("500x500")

def open_dialog():
    dialog = filedialog.askopenfilename(initialdir = "C:/" , filetypes = (("Text Files" , "*.txt") , ("Python Files" , "*.py") , ("html files" , "*.html")))
    if dialog != "":
        box = messagebox.askyesno("Confirm" , "Are you sure you want to print this file?")
        if box == 1:
            win32api.ShellExecute(0 , "print" , dialog , None , "." , 0)

my_button = Button(root, text = "Select file to print" , command = open_dialog)
my_button.place(x = 190 , y = 210)

mainloop()

这里,当我打开一个文件打印后,win32api只是安静地做,不显示任何设置窗口。

我想要的是在打印之前带一个设置窗口,以便我可以根据自己的意愿更改设置。

例如,当我尝试在默认的 Windows 记事本中打印文件时,它会显示如下设置窗口:

我什至想带一个这样的设置窗口,以便我可以根据自己的意愿更改设置。

有没有办法在win32api中实现这一点?

如果有人能帮助我,那就太好了。

编辑:

感谢@Zhu Song - MSFT 的回答。您的回答帮助我带来了我想要的设置窗口,但我在打印文件时遇到了一些问题。

当我尝试打印文本文件时,一切正常,但我正在打印的文件的路径和当前页码也与作为页眉和页脚的文本一起打印。

这是一张图片:

正如您在此处看到的,顶部和底部有一些我不想打印的不必要的文本。

另外,当我尝试打印 python 文件时,文件中的文本根本没有被打印出来:

有没有办法解决这些问题?

【问题讨论】:

  • 如果您想控制打印,您需要正确打印。 ShellExecute 不是为此而设计的。你的整个方法注定要失败。我在你最后一个问题上也说过这个。

标签: python winapi tkinter printing


【解决方案1】:

请参阅ShellExecute, “Print”

正如大卫·赫弗南所说:

您依赖 shell 的关联来打印文件,但这是一种非常脆弱的方法。如果您右键单击该文件并选择 Print,您将观察到与调用 ShellExecute 相同的行为。

您可以尝试使用以下代码:

    if box == 1:
        filepath = "C:\\windows\\system32\\mshtml.dll,PrintHTML " + "\"" + dialog + "\"" 
        win32api.ShellExecute(0 , None , "rundll32.exe" , filepath , None , 1)

更多参考:What parameters to pass to mshtml.dll?

【讨论】:

  • 感谢您的回答,这带来了一个我想要的设置窗口,但是当我尝试打印文件时,只打印文件的路径,而不是打印文件内的文本.有没有办法解决这个问题?
  • @Lenovo360 这段代码对我来说很好用,你测试正常的.txt.html 文件吗?
  • 我正在尝试打印一个 python 文件 (.py)
  • 我测试了这三种文件类型,代码对我来说都很好。可能需要确认选择的打印机是否可以正常工作。
  • 您可以尝试使用Microsoft Print to PDF查看.py文件是否可以正常打印。如果是这样,可能您的打印设备不支持此功能。
猜你喜欢
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多