print(*)和* .print()

时间:2019-09-02 09:19:30

标签: python python-3.x tkinter

我盯着一个很长的代码。我只是尝试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中显示)

3 个答案:

答案 0 :(得分:0)

将其视为Python print对常规class的对象的行为,即,如果您提供__str__方法,它将以详细的字符串形式打印对象您正在寻找(当然,您可以决定要打印的内容),但是如果类中没有__str__方法,则打印对象将为您提供一个奇怪的输出,包括对象的地址位置(类似于您的地址示例)作为标准print方法不知道如何打印对象。

<__main__.Foobar instance at 0x7cf2a22e>

print(sh)在做相同的事情(没有意外)。

对于这个特定问题,两个print都是不同的.printsh上定义的 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")