如何return条目中的内容打印出来
How to return content in entry to be printed
我正在尝试 return 打印输入框中的内容,但即使我 select tkinter 凸起按钮提醒我 select 强制按钮,消息框也会弹出.
挑战:
当我 select 在 select 打印按钮之前的强制按钮时,消息框仍然弹出。
如果我不在条目小部件中键入,它的消息会弹出来提醒我,但是 select 按钮也会弹出两次,而不仅仅是消息框来提醒我。
也已将所有功能传递给打印按钮。我的强制按钮在执行命令后 selected 然后 return 到正常状态时将被提升。
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
欢迎您对 return 条目小部件中的内容提出建议,以便通过 select 强制按钮打印。
我认为你做错了 - 你在 accept_output()
中执行 output()
所以你无法阻止它。当一切正常时,您必须在 output()
中执行 accept_output()
。
import tkinter as tk
from tkinter import messagebox
import win32print, win32ui, win32con
def output():
global choosed
text = new.get()
if not choosed:
messagebox.showerror("error", "select the buttons")
elif len(text) == 0:
messagebox.showerror("error", "entry empty")
else:
accept_output(text)
choosed = None
lot1.configure(relief=tk.RAISED, state=tk.ACTIVE)
def accept_output(text):
print("printing ...", text)
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, text) # <- text
dc.EndDoc()
def raised_button(button_object):
global choosed
# function will be not accesible if you use state=tk.DISABLED
# so I remove state=tk.DISABLED
if choosed: # previously clicked
choosed.configure(relief=tk.RAISED)
choosed = None
else:
button_object.configure(relief=tk.SUNKEN)
choosed = button_object
# --- main ---
choosed = False
root = tk.Tk()
new = tk.StringVar()
tk.Entry(root, textvariable=new).pack()
lot1 = tk.Button(root, text="Compulsory to select")
lot1.configure(command=lambda button_object=lot1:raised_button(button_object))
lot1.pack()
tk.Button(root, text="Print number", command=output).pack()
root.mainloop()
您可以使用 Checkbutton
而不是 Button
,并且您将不需要函数 choosen
和 raised_button
。如果使用 indicatoron=False
.
,Checkbutton
甚至可以看起来像普通按钮
import tkinter as tk
from tkinter import messagebox
import win32print, win32ui, win32con
def output():
text = new.get()
if not option1.get() and not option2.get():
messagebox.showerror("error", "select options")
elif len(text) == 0:
messagebox.showerror("error", "entry empty")
else:
accept_output(text)
option1.set(False)
option2.set(False)
def accept_output(text):
print("printing ...", text)
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, text) # <- text
dc.EndDoc()
# --- main ---
root = tk.Tk()
new = tk.StringVar()
tk.Entry(root, textvariable=new).pack()
option1 = tk.BooleanVar(value=False)
tk.Checkbutton(root, text="Compulsory to select (option1)", var=option1).pack()
option2 = tk.BooleanVar(value=False)
tk.Checkbutton(root, text="Compulsory to select (option2)", var=option2, indicatoron=False).pack()
tk.Button(root, text="Print number", command=output).pack()
root.mainloop()
我正在尝试 return 打印输入框中的内容,但即使我 select tkinter 凸起按钮提醒我 select 强制按钮,消息框也会弹出.
挑战:
当我 select 在 select 打印按钮之前的强制按钮时,消息框仍然弹出。
如果我不在条目小部件中键入,它的消息会弹出来提醒我,但是 select 按钮也会弹出两次,而不仅仅是消息框来提醒我。 也已将所有功能传递给打印按钮。我的强制按钮在执行命令后 selected 然后 return 到正常状态时将被提升。
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
欢迎您对 return 条目小部件中的内容提出建议,以便通过 select 强制按钮打印。
我认为你做错了 - 你在 accept_output()
中执行 output()
所以你无法阻止它。当一切正常时,您必须在 output()
中执行 accept_output()
。
import tkinter as tk
from tkinter import messagebox
import win32print, win32ui, win32con
def output():
global choosed
text = new.get()
if not choosed:
messagebox.showerror("error", "select the buttons")
elif len(text) == 0:
messagebox.showerror("error", "entry empty")
else:
accept_output(text)
choosed = None
lot1.configure(relief=tk.RAISED, state=tk.ACTIVE)
def accept_output(text):
print("printing ...", text)
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, text) # <- text
dc.EndDoc()
def raised_button(button_object):
global choosed
# function will be not accesible if you use state=tk.DISABLED
# so I remove state=tk.DISABLED
if choosed: # previously clicked
choosed.configure(relief=tk.RAISED)
choosed = None
else:
button_object.configure(relief=tk.SUNKEN)
choosed = button_object
# --- main ---
choosed = False
root = tk.Tk()
new = tk.StringVar()
tk.Entry(root, textvariable=new).pack()
lot1 = tk.Button(root, text="Compulsory to select")
lot1.configure(command=lambda button_object=lot1:raised_button(button_object))
lot1.pack()
tk.Button(root, text="Print number", command=output).pack()
root.mainloop()
您可以使用 Checkbutton
而不是 Button
,并且您将不需要函数 choosen
和 raised_button
。如果使用 indicatoron=False
.
Checkbutton
甚至可以看起来像普通按钮
import tkinter as tk
from tkinter import messagebox
import win32print, win32ui, win32con
def output():
text = new.get()
if not option1.get() and not option2.get():
messagebox.showerror("error", "select options")
elif len(text) == 0:
messagebox.showerror("error", "entry empty")
else:
accept_output(text)
option1.set(False)
option2.set(False)
def accept_output(text):
print("printing ...", text)
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, text) # <- text
dc.EndDoc()
# --- main ---
root = tk.Tk()
new = tk.StringVar()
tk.Entry(root, textvariable=new).pack()
option1 = tk.BooleanVar(value=False)
tk.Checkbutton(root, text="Compulsory to select (option1)", var=option1).pack()
option2 = tk.BooleanVar(value=False)
tk.Checkbutton(root, text="Compulsory to select (option2)", var=option2, indicatoron=False).pack()
tk.Button(root, text="Print number", command=output).pack()
root.mainloop()