我正在尝试根据用户的分辨率制作一个更改的GUI。我仍然是Python的新手,但我已经设法完成了这一点。我很难找到为什么滚动条不会使用给它们的所有空间。这导致它们后面的框架可见。
root = Tk()
screen_height = root.winfo_screenheight()
screen_width = root.winfo_screenwidth()
h = (screen_height / 800)
w = (screen_width / 1300)
frame = ['topleft', 'topmid', 'topright',
'bottomleft', 'bottommid']
multiplier = [300, 200, 800, 500, 100]
height = [0,
Decimal(h*(multiplier[0]))
.quantize(Decimal('1.'), rounding=ROUND_UP),
Decimal(h*(multiplier[1]))
.quantize(Decimal('1.'), rounding=ROUND_UP),
Decimal(h*(multiplier[2]))
.quantize(Decimal('1.'), rounding=ROUND_UP),
Decimal(h*(multiplier[3]))
.quantize(Decimal('1.'), rounding=ROUND_UP),
Decimal(h*(multiplier[4]))
.quantize(Decimal('1.'), rounding=ROUND_UP)
]
width = [0,
Decimal(w*(multiplier[0]))
.quantize(Decimal('1.'), rounding=ROUND_UP),
Decimal(w*(multiplier[1]))
.quantize(Decimal('1.'), rounding=ROUND_UP),
Decimal(w*(multiplier[2]))
.quantize(Decimal('1.'), rounding=ROUND_UP),
Decimal(w*(multiplier[3]))
.quantize(Decimal('1.'), rounding=ROUND_UP),
Decimal(w*(multiplier[4]))
.quantize(Decimal('1.'), rounding=ROUND_UP),
Decimal(w*(multiplier[4]))
.quantize(Decimal('1.'), rounding=ROUND_UP),
]
topleft = Frame(root,
bg = 'black', bd='3',
height = height[1], width = width[1],
relief='flat'
).grid(row = height[0], column = width[0],
rowspan = height[1], columnspan = width[1])
topmid = Frame(root,
bg = 'yellow', bd='3',
height = height[2], width = width[2],
relief='flat'
).grid(row = height[0], column = width[1],
rowspan = height[2], columnspan = width[2])
bottommid = Frame(root,
bg = 'pink', bd ='3',
height = height[5], width = width[5],
relief='flat'
).grid(row = height[2], column = width[1],
rowspan = height[5], columnspan = width[5])
bottomright = Frame(root,
bg = 'blue', bd='3',
height = height[5], width = width[5],
relief='flat'
).grid(row = height[2], column = width[1]+width[5],
rowspan = height[5], columnspan = width[5])
class file_selector:
def __init__(self):
global fs_scrollbar, fs_listbox, check
bottomleft = Frame(root,
bg = 'white', bd='3',
height = height[4], width = width[4],
relief='flat'
).grid(row= height[1], column= width[0],
rowspan= height[4], columnspan= width[4])
self.fs_scrollbar = Scrollbar(bottomleft,
orient = VERTICAL
)
self.fs_listbox = Listbox(bottomleft,
bg = 'white',
relief = 'flat',
yscrollcommand = self.fs_scrollbar.set
)
self.check = print(self.fs_listbox.curselection())
self.fs_listbox.bind('<ButtonRelease-1>', self.check)
self.fs_scrollbar['command'] = self.fs_listbox.yview
file_selector.widgets(self)
def widgets(self):
self.fs_scrollbar.grid(row = height[1], column = (width[4]-(width[4]*Decimal(0.05)).quantize(Decimal('1.'), rounding=ROUND_UP)),
rowspan = height[4], columnspan = ((width[4]*Decimal(0.05)).quantize(Decimal('1.'), rounding=ROUND_UP)),
sticky= N+E+S+W
)
for file in os.listdir(os.curdir):
if file.endswith(".txt"):
self.fs_listbox.insert(END, file)
self.fs_listbox.grid(row = height[1], column = width[0],
rowspan = height[4], columnspan = (width[4]-(width[4]*Decimal(0.05)).quantize(Decimal('1.'), rounding=ROUND_UP)),
sticky = N+E+S+W
)
class text_editor:
def __init__(self):
global te_scrollbar, te_text
topright = Frame(root,
bg = 'red', bd='3',
height = height[3], width = width[3],
relief='flat'
).grid(row=height[0], column= width[4],
rowspan= height[3], columnspan= width[3])
self.te_scrollbar = Scrollbar(topright,
orient = VERTICAL
)
self.te_text = Text(topright,
bg = 'white',
yscrollcommand = self.te_scrollbar.set
)
self.te_scrollbar['command'] = self.te_text.yview
text_editor.widgets(self)
def widgets(self):
with open('test1.txt', 'r') as self.file:
self.file = self.file.read()
self.te_scrollbar.grid(row = height[0], column = (width[4]+width[3]-(width[3]*Decimal(0.05)).quantize(Decimal('1.'), rounding=ROUND_UP)),
rowspan = height[3], columnspan = ((width[3]*Decimal(0.05)).quantize(Decimal('1.'), rounding=ROUND_UP)),
sticky = N+S
)
self.te_text.insert(END, self.file)
self.te_text.grid(row = height[0], column = width[4],
rowspan = height[3], columnspan = (width[3]-(width[3]*Decimal(0.05)).quantize(Decimal('1.'), rounding=ROUND_UP)),
sticky = N+E+S+W
)
file_selector()
text_editor()
对于糟糕的代码提前抱歉,Tkinter没有很好的文档记录(而且我不是很擅长)。