【发布时间】:2017-11-28 14:10:29
【问题描述】:
我试图在我的输入框中返回要打印的内容,但即使我选择了 tkinter 提出的按钮提醒我选择强制按钮,消息框也会弹出。
挑战:
当我在选择打印按钮之前选择强制按钮时,仍然会弹出消息框。
-
如果我不输入条目小部件,它的消息会弹出来提醒我,但选择按钮也会弹出两次,而不是只弹出消息框来提醒我。 也将所有功能传递给打印按钮。我的强制按钮是在选择时抬起,然后在执行命令后返回正常状态。
import tkinter as tk from tkinter import messagebox import win32print, win32ui, win32con def output(): global choosed now = new.get() if not choosed: messagebox.showerror("error", "select the buttons") elif len(now) == 0: messagebox.showerror("error", "entry empty") else: return (now) def accept_output(): dc = win32ui.CreateDC() printername = win32print.GetDefaultPrinter() dc.CreatePrinterDC(printername) dc.SetMapMode(win32con.MM_TWIPS) scale_factor = 20 dc.StartDoc('Win32print ') pen = win32ui.CreatePen(0, int(scale_factor), 0) dc.SelectObject(pen) font = win32ui.CreateFont({ "name": "Lucida Console", "height": int(scale_factor * 10), "weight": 400, }) dc.SelectObject(font) dc.TextOut(scale_factor * 72,-1 * scale_factor * 72, output())# to receive the content in the entry widget dc.EndDoc() def raised_button(button_object): global choosed if choosed: # previously clicked choosed.configure(relief=tk.RAISED, state=tk.ACTIVE) choosed = button_object button_object.configure(relief=tk.SUNKEN, state=tk.DISABLED) def stop(): global choosed choosed = None lot1.configure(relief=tk.RAISED, state=tk.ACTIVE) root = tk.Tk() root.geometry("400x400") new = tk.StringVar() en = tk.Entry(root, textvariable=new).pack() choosed = False lot1 = tk.Button(root, text="compulsory to select") lot1.configure(command=lambda button_object=lot1: raised_button(button_object)) lot1.pack(side="left") B=tk.Button(root, text="print number", command=lambda:[output(), stop(), accept_output()]) B.place(x=150, y=300) root.mainloop()
我在 accept_output() 上添加了 output() 函数,但仍然遇到同样的错误。
def accept_output():
global choosed
now = new.get()
if not choosed:
messagebox.showerror("error", "select one of the buttons")
elif len(now) == 0:
messagebox.showerror("error", "entry empty")
else:
return (now) # when i add the output here it gives select button
欢迎您提出关于返回条目小部件中的内容的建议,以便通过选择强制按钮打印该内容。
【问题讨论】:
-
顺便说一句:你不能用
output(), stop(), accept_output()而不是列表[output(), stop(), accept_output()]创建普通函数 - 它对人类来说更具可读性。 -
我结合了 add output() 和 accept_output() 它给出了相同的错误,在 accept_output() 函数之上的 output() 作为一个函数。
-
我的建议并不能解决您的问题,但它使代码对其他人更具可读性。
-
顺便说一句:当您执行
var = Widget(...).pack(...)时,您将None分配给var,因为pack()/grid()/place()返回None。如果您不需要这个var,那么您可以跳过它并执行Widget(...).pack(...)。如果您需要这个var,那么您必须分两行完成:var = Widget(...)和var.pack(...) -
我不明白你的问题。我运行代码,它按您的预期工作。你确定你运行相同的代码吗?您是否在具有其他
Tk()或mainloop()的其他程序中运行它?顺便说一句:我在 Linux 上进行测试,所以我必须删除win32模块和accept_output()中的代码
标签: python tkinter printing pywin32