我盯着一个很长的代码。我只是尝试GUI部分。有这些行:
sh = packing_options[best_index].sheets[idx]
sh.print()
for rect in sh.rect_list:
rect.print()
我想显示GUI窗口中存储在sh和rect中的值。
当我使用
b3 = tk.Label(top, text=sh)
b3.grid(row=0, column=2)
b4 = tk.Label(top, text=rect)
b4.grid(row=0, column=2)
将其作为结果:<< strong> main 。Sheet对象位于0x0000024F5CF4A320>
类的代码如下:
class Rect:
def __init__(self, w, l):
self.l = l
self.w = w
def print(self):
print('Rect w:' + str(self.w) + 'l:' + str(self.l))
def area(self):
return self.l * self.w
## class for sheet to save all rectangles' positions
class Sheet:
# initialization
def __init__(self, W, L):
self.W = W # width (=horizontal length)
self.L = L # length (=height, vertical length)
self.rect_list = [] # rectangle list
self.rect_pos = [] # rectangle starting position from left bottom
self.rect_rotate = [] # rectangle rotation indicator list, 0: not rotated, 1: rotated
self.lhl_x = [0,W] # lowest horizontal line boundary point list
self.lhl_y = [0] # lowest horizontal line height list: each element is height
# area of sheet
def area(self):
return self.L * self.W
def print(self):
print('sheet W:' + str(self.W) + ' L:' + str(self.L))
如何获取真实值并将其存储在变量中以使用print(*)(最终用于在GUI中显示)
答案 0 :(得分:0)
将其视为Python print
对常规class
的对象的行为,即,如果您提供__str__
方法,它将以详细的字符串形式打印对象您正在寻找(当然,您可以决定要打印的内容),但是如果类中没有__str__
方法,则打印对象将为您提供一个奇怪的输出,包括对象的地址位置(类似于您的地址示例)作为标准print
方法不知道如何打印对象。
<__main__.Foobar instance at 0x7cf2a22e>
print(sh)
在做相同的事情(没有意外)。
对于这个特定问题,两个print
都是不同的.print
是sh
上定义的 tkinter 方法,而print是 python的方法。
如果您想在python内置的sh
函数中使用print
,则需要使用__str__
(或__repr__
)方法中的 class Sheet 中,该方法将成为对象的字符串表示形式,因为print(sh)
最终会调用Sheet.__str__()
:
在该__str__
方法中,您可以使用self
关键字将想要查看的所有详细信息简单地放在屏幕上。
这个方向上的一个非常简单的例子是
def __str__(self):
print('sheet W:' + str(self.W) + ' L:' + str(self.L))
__str__
是对象的字符串表示形式,最好将其视为 Java 中的toString
函数(如果您熟悉的话)
答案 1 :(得分:0)
from itertools import enumerate
from tkinter import messagebox
def sheet_info(sheet):
str = "Sheet W:{} L:{} Contains {} rectangles:".format(sheet.W, sheet.L, len(sheet.rect_list))
for idx, rect in enumerate(sheet.rect_list):
str += "\n Rectangle W:{} L:{} at position {}".format(rect.w, rect.l, sheet.rect_pos[idx])
return str
messagebox.showinfo("sheet info", sheet_info(sh))
这应该做到。可能包含错误,因为我无法验证它为atm。
答案 2 :(得分:-1)
from tkinter import messagebox
messagebox.showinfo("Title", "your text here")