Ich verwende Python 3.11.9 im Windows 11 Home-Betriebssystem
Hier ist mein relevanter GUI-Code
import tkinter as tk
STACKSIZE=10
class Table(tk.Frame):
def __init__(self, master, header_labels:tuple,*args, **kwargs):
tk.Frame.__init__(self, master, *args, **kwargs)
# configuration for all Labels
# easier to maintain than directly inputting args
self.table_header_lbl_overwritten = {
'master' : self,
'foreground' : 'blue',
'relief' : 'solid',
'font' : 'Arial 20 bold',
'padx' : 5,
'pady' : 0,
'bd' : 1,
'bg' : 'white',
}
self.no_master_table_header_lbl_overwritten = {
'foreground' : 'blue',
'relief' : 'solid',
'font' : 'Arial 20 bold',
'padx' : 5,
'pady' : 0,
'bd' : 1,
'bg' : 'white',
}
self.big_tot_lbl = {
'foreground' : 'green',
'relief' : 'solid',
'font' : 'Arial 22 bold',
'padx' : 5,
'pady' : 0,
'bd' : 1,
'bg' : 'white',
}
self.headers = []
self.tot_lbl = []
self.header_widths = []
self.original_header_widths = []
x=2
print("creating table")
for col, lbl in enumerate(header_labels):
(header := tk.Label(text=lbl, **self.table_header_lbl_overwritten)).grid(row=0, column=col, sticky='nswe')
width = header.winfo_reqwidth()
header = tk.Label(self.master.master.master, text=lbl, **self.no_master_table_header_lbl_overwritten)
header.place(x=x, y=2)
x += width
self.headers.append(header)
self.header_widths.append(width)
print("adding "+lbl+' of width '+str(width)+" in table")
self.original_header_widths.append(width)
totals_label=tk.Label(self.master.master.master,text="\nTotal Qty 0\nTotal Amt 0\nBalance 0\n",**self.big_tot_lbl)
totals_label.place(x=x+5,y=20)
self.tot_lbl.append(totals_label)
def redraw_headers(self):
x = 2
print(str(self.header_widths))
for col, header in enumerate(self.headers):
width = self.header_widths[col]
header.place(x=x, y=2, width=width)
x += width
self.tot_lbl[0].place(x=x+5, y=20)
class Application(tk.Tk):
def __init__(self, title:str="tkinter window", x:int=0, y:int=0, **kwargs):
tk.Tk.__init__(self)
self.title(title)
self.config(**kwargs)
#Fixed Entries
header_labels = ('','Description','Quantity','Rate','Amount','')
#FONT SETTINGS
self.gui_btn_look = {
'foreground' : 'red',
'relief' : 'groove',
'font' : 'Arial 18 bold',
'padx' : 0,
'pady' : 0,
}
self.gui_info_lbl_look = {
'foreground' : 'green',
'relief' : 'solid',
'font' : 'Arial 18 bold',
}
self.gui_lbl_look = {
'foreground' : 'black',
'relief' : 'flat',
'font' : 'Arial 18 bold',
'padx' : 0,
'pady' : 0,
'borderwidth': 1,
}
self.gui_entry_look = {
'foreground' : 'blue',
'font' : 'Arial 18 bold',
'highlightbackground' :"black",
'highlightthickness' : 2,
'highlightcolor' :"blue",
'insertbackground' :"blue",
'insertwidth' :3,
}
self.pending_lbl_look = {
'foreground' : 'black',
'relief' : 'groove',
'font' : 'Arial 18 bold',
'padx' : 5,
'pady' : 0,
}
#GUI
#bill number
self.first_row_frame=tk.Frame(self)
self.first_row_frame.grid(column=0,row=0,sticky='W')
self.lbl_ser_num=tk.Label(self.first_row_frame,text="Sr No:",**self.gui_lbl_look)
self.lbl_ser_num.grid(column=0,row=0)
self.txt_ser_num=tk.Label(self.first_row_frame,text='1',**self.gui_lbl_look)
self.txt_ser_num.grid(column=1,row=0)
# print button
self.btn_print=tk.Button(self.first_row_frame,text="Print",**self.gui_btn_look)
self.btn_print.grid(column=2,row=0,padx=5)
# new bill button
self.btn_print=tk.Button(self.first_row_frame,text="New Bill",**self.gui_btn_look)
self.btn_print.grid(column=3,row=0)
# cash field
self.cash_lbl=tk.Label(self.first_row_frame,text="Cash:",**self.gui_lbl_look)
self.cash_lbl.grid(column=4,row=0,padx=(5,0))
self.cash=tk.Entry(self.first_row_frame,width=5,text='0',**self.gui_entry_look)
self.cash.grid(column=5,row=0)
# Time label
self.txt_date=tk.Label(self.first_row_frame,text='Sunday, December 22, 2024 07:36:02 AM',**self.gui_lbl_look)
self.txt_date.grid(column=6,row=0,padx=5)
self.btn_pending=tk.Button(self.first_row_frame,text="",**self.gui_btn_look)
self.go_to_printed_btn.grid(column=9,row=0)
# Second row
self.second_row_frame=tk.Frame(self)
self.second_row_frame.grid(column=0,row=1,sticky='W',pady=5)
# Goods return field
self.lbl_return=tk.Label(self.second_row_frame,text="GR:",**self.gui_lbl_look)
self.lbl_return.grid(column =0, row =0)
self.return_value=tk.Entry(self.second_row_frame,width=5,text='0',**self.gui_entry_look)
self.return_value.grid(column=1,row=0,padx=(0,5))
#description field
self.txt_desc=tk.Entry(self.second_row_frame,width=10,**self.gui_entry_look)
self.txt_desc.grid(column=2,row=0)
# rate field
self.lbl_rate=tk.Label(self.second_row_frame,text="Rate:",**self.gui_lbl_look)
self.lbl_rate.grid(column=5,row=0,padx=(5,0))
self.txt_rate=tk.Entry(self.second_row_frame,width=4,text='',**self.gui_entry_look)
self.txt_rate.grid(column=6,row=0)
self.txt_rate.focus_set()
# quantity field
self.lbl_qty=tk.Label(self.second_row_frame,text="Qty:",**self.gui_lbl_look)
self.lbl_qty.grid(column=3,row=0,padx=(5,0))
self.txt_qty=tk.Entry(self.second_row_frame,width=3,**self.gui_entry_look)
self.txt_qty.grid(column=4,row=0)
#Item amount
self.lbl_amt=tk.Label(self.second_row_frame,text="Amount:",**self.gui_lbl_look,bd=1,anchor="e",justify="right")
self.lbl_amt.grid(column=7,row=0,padx=(5,0))
self.txt_amt=tk.Label(self.second_row_frame,text='0',width=5,**self.gui_lbl_look,bd=1,anchor="w",justify="left")
self.txt_amt.grid(column=8,row=0)
#Add to table button
self.btn_add=tk.Button(self.second_row_frame,text="Add",**self.gui_btn_look)
self.btn_add.grid(column=9,row=0,padx=5)
#Pending label
self.txt_pending=tk.Label(self.second_row_frame,text='pending:',**self.gui_lbl_look,anchor="w",justify="left")
self.txt_pending.grid(column=10,row=0)
self.pending_label_stack=[]
for number in range(0,STACKSIZE):
self.pending_label_stack.append(tk.Label(self.second_row_frame,text='-',**self.pending_lbl_look,anchor="w",justify="left"))
self.pending_label_stack[number].grid(column=11+number,row=0)
# Fourth row of Table
self.content_frame=tk.Frame(self,highlightbackground="black",highlightthickness=1)
self.content_frame.grid(column=0,row=3,sticky='nswe')
self.canvas=tk.Canvas(self.content_frame,bg='sky blue')
scrollbar=tk.Scrollbar(self.content_frame,orient="vertical",command=self.canvas.yview,width=50)
self.canvas.configure(yscrollcommand=scrollbar.set)
self.table_frame=tk.Frame(self.canvas)
self.table_frame.grid(column=0,row=0,sticky='nws')
self.table_frame.bind("",lambda e:self.canvas.configure(scrollregion=self.canvas.bbox("all")))
self.canvas.create_window((0, 0),window=self.table_frame,anchor="nw")
self.frame_id=self.canvas.create_window((0,0),window=self.table_frame,anchor="nw")
self.canvas.grid(row=0,column=0,sticky="nswe")
scrollbar.grid(row=0,column=1,sticky="ns")
self.table_frame.trial_var=0
self.table = Table(self.table_frame,header_labels)
self.table.grid(row=0,column=0,sticky='nswe')
#virtual keyboard
self.keyboard_frame=tk.Frame(self,highlightbackground="black",highlightthickness=1)
self.keyboard_frame.grid(column=0,row=3,sticky='se',padx=(10,55))
self.info_label=tk.Label(self,text=" New bill:ctrl+N \n Cancel:x \n GR:F1 \n Rate:F3 \n Qty:F2 \n Cash:F4 \n Print:F10 ",**self.gui_info_lbl_look)
self.info_label.grid(column=0,row=3,sticky='ne',padx=(10,55))
self.grid_rowconfigure(3, weight=1)
self.grid_columnconfigure(2, weight=1)
for numbers in range(1,11):
self.add_number_button=tk.Button(self.keyboard_frame,text=str(numbers%10),**self.gui_btn_look)
self.add_number_button.grid(column=int(numbers-1)%3,row=int((numbers-1)/3))
self.clear_button=tk.Button(self.keyboard_frame,**self.gui_btn_look)
self.clear_button.grid(column=1,row=3,columnspan=2,sticky='e')
self.enter_button=tk.Button(self.keyboard_frame,text='Enter',**self.gui_btn_look)
self.enter_button.grid(column=0,row=4,columnspan=3,sticky='')
#maximizing table area
self.grid_columnconfigure(0, weight=1)
self.content_frame.columnconfigure(0,weight=1)
self.content_frame.rowconfigure(0,weight=2)
# update so we can get the current dimensions
self.update_idletasks()
self.state('zoomed')
#FOR LINUX self.attributes('-zoomed',True)
if __name__ == "__main__":
Application().mainloop()
Hier wird die Funktion redraw_headers verwendet, wenn sich die Tabellenzellen beim Hinzufügen einer Zeile erweitern oder beim Löschen einer Zeile verkleinern. Der Zweck besteht darin, zu zeigen, dass diese Funktion die Kopfzeilen am Tabelleninhalt ausrichtet.
Ich möchte, dass die blaue Leinwand mit der Bildlaufleiste die gesamte Fensterbreite einnimmt. Wie kann ich das machen?
Hier ist der Screenshot des aktuellen Fensters
[img]https: //i.sstatic.net/YF82K89x.png[/img]
Ich spreche in diesem Beitrag über den leeren Raum neben der Bildlaufleiste.
Bitte teilen Sie mir mit, ob Alle weiteren Details sind erforderlich.
Vielen Dank.
Die Leinwand wird nicht erweitert, um die gesamte Fensterbreite in tkinter einzunehmen ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Wann sollte ich
vs verwenden? Erweitert die Zahl in Java Generics? [Duplikat]
by Anonymous » » in Java - 0 Replies
- 5 Views
-
Last post by Anonymous
-