Merhaba ben yazdığım bir programa yardım ve geri bildirim amaçlı mail adresi gibi şeyleri ekleyeceğim ancak düzgün bir arayüz yapamadım ve aklıma açılabilir yazı geldi (hani bu uzun yazıların solunda küçük üçgen var ya o ) bunu nasıl yapabilirim veya daha kullanışlı bir şey var mı bildiğiniz?
Merhaba,
Pencere çubuğunun altında menü oluştur. Hani şu tarz oluyor ya;
Dosya yazan yerde mesela sen program yaz. Açılır menü olsun ve alt menülerinde şunlar yer alsın.
Hazırlayan
Yardım
Bunlara tıklandığı zaman yazacağın metne göre ufak bir pencere tasarla tıklayınca açılsın pencerede yazsın işte mesela yardıma tıkladı
Program hakkında yardım almak için;
e_mail_adı@domain_adresin.com
gibi. Tabi bu anlatıldığı kadar ilkel tasarlamak hoş görünmez. Zenginleştirmek lazım. Ben sadece fikir olsun diye söyledim.
Buda olabilecek bir şey elbette ancak o tip açılır kısmı nasıl yaptığımızı bilmiyorum daha eğer biliyorsanız kısaca özetleyebilrimisiniz?
Merhaba, aşağıdaki gibi bir açılabilir bir pencere mi istiyordunuz?
#!/usr/bin/python3.8
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import ttk
class Checkbutton(ttk.Checkbutton):
def __init__(self, widget: tk.Frame, *args, **kwargs):
super().__init__(*args, **kwargs)
self.pack(side="left")
self.var = tk.IntVar()
self.style = ttk.Style()
self.style.configure(
"Toolbutton",
highlightthickness=0,
borderwidth=0
)
self.style.map(
"Toolbutton",
background=[("hover", self.master.cget("bg"))]
)
self.configure(
variable=self.var,
text="\u25BD",
style="Toolbutton",
command=lambda: self.expand(widget),
)
def expand(self, widget: tk.Frame):
if self.var.get():
self.configure(
text="\u25B3"
)
widget.grid(row=1, column=0, sticky="nw")
else:
self.configure(
text="\u25BD"
)
widget.grid_forget()
class ExpandableFrame(tk.Frame):
def __init__(self, title: str, content: str, *args, **kwargs):
super().__init__(*args, **kwargs)
self.pack(fill="both")
self.top_frame = tk.Frame(master=self)
self.top_frame.grid(row=0, column=0, sticky="nw")
self.bottom_frame = tk.Frame(master=self)
self.checkbutton = Checkbutton(
master=self.top_frame,
widget=self.bottom_frame
)
self.title = tk.Label(
master=self.top_frame,
text=title,
font="Arial 12 bold"
)
self.title.pack(side="left")
self.content = tk.Text(
master=self.bottom_frame,
font="Arial 10",
wrap="word",
background=self.master.cget("bg"),
width=50,
height=5,
bd=0
)
self.content.insert("insert", content)
self.content["state"] = "disabled"
self.content.pack(fill="both")
root = tk.Tk()
texts = {
"Django": "Django is a Python-based free and open-source web framework that follows the model-view-controller architectural pattern. It is maintained by the Django Software Foundation, an American independent organization established as a 501 non-profit.",
"Flask": "Flask is a micro web framework written in Python. It is classified as a microframework because it does not require particular tools or libraries. It has no database abstraction layer, form validation, or any other components where pre-existing third-party libraries provide common functions."
}
for title, content in texts.items():
ExpandableFrame(master=root, title=title, content=content)
root.mainloop()
çok isterim lakin buna şu sıralar pek imkanım olmuyor bir şekilde sakin kafayla eve geçtiğimde örnek olarak atarım
@dildeolupbiten Tam anlamıyla istediğim şey bu görselde var eğer programa sorunsuz entegre edersem bunu kullanacağım teşekkür ederim
Bunu denemedim ancak mantığını anlayamadım denediğim zaman sorun yaşıyorum her seferinde bazı eksikler olduğunu söylüyor sebebi şu orada
from tkinter import *
bu şekilde yapılmış ancak ben
import tkinter as tk
şeklinde yazdım bu yüzden olmuyor hala düzeltmeye çalışıyorum gerekli yerlere tk eklemeye çalışıyorum umarım tutar çünkü benim çok hoşuma gitti
Yanlışlık yok. Birincisi tüm herşeyi içeri aktarırken ikincisi sadece tkinter modülünü içeri aktarıp tk olarak isimlendirmiş. Birincisinde, sadece pencere aracının adını yazarak kullanabilirsiniz, ikincisinde tk. ile kullanabilirsiniz. Şöyle yani;
from tkinter import *
pencere = Tk()
import tkinter as tk
pencere = tk.Tk()
from tkinter import *
dediğiniz zaman tkinter içerisindeki her şeyi kendi başına kullanabilme imkanınız oluyor.
from tkinter as tk
dediğiniz zaman tkinter’ı bundan sonra tk
olarak adlandırıp kullanacağın anlamına geliyor.
İkisinin arasındaki tek fark sözdimi. *
kullandığın zaman Tk()
yazarsın, as tk
kullandığın zaman tk.Tk()
kullanırsın.
Örnekler;
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.hi_there = tk.Button(self)
self.hi_there["text"] = "Hello World\n(click me)"
self.hi_there["command"] = self.say_hi
self.hi_there.pack(side="top")
self.quit = tk.Button(self, text="QUIT", fg="red",
command=self.master.destroy)
self.quit.pack(side="bottom")
def say_hi(self):
print("hi there, everyone!")
root = tk.Tk()
app = Application(master=root)
app.mainloop()
Aynı kodun *
kullanarak yazınca da böyle oluyor;
from tkinter import *
class Application(Frame): #burası değişti
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.hi_there = Button(self) #burası değişti
self.hi_there["text"] = "Hello World\n(click me)"
self.hi_there["command"] = self.say_hi
self.hi_there.pack(side="top")
self.quit = Button(self, text="QUIT", fg="red", #burası değişti
command=self.master.destroy)
self.quit.pack(side="bottom")
def say_hi(self):
print("hi there, everyone!")
root = Tk() #burası değişti
app = Application(master=root)
app.mainloop()
2 şekilde de import edebilirsiniz:
from tkinter import *
import tkinter as tk
Aynı dosyada bulunuyor bu kodlar.