Linux da yazılmış Python programı Windows da pencere farkı

İyi günler

Yaşadığım bir sorundan dolayı burayı keşfettim. İyi ki yaşamışım o sorunu dedim.

Ben acemi olarak mesleğimle ilgili bir eğitim programı yapmaya çalıştım. Genel olarak istediğim şekilde tamamladımda. Linux mint kullanıyorum. Programı windows ortamında görebilmek için virtual machine kurup oraya windows 10 kurdum

programın son halini kopyaladım windows a. çalıştırdım. çalışmasında bir sorun yok. ama pencere sığmıyor windows da. yani linux dayken pencere içindeki herşey görünüyor. windowsdayken pencerenin alt kısmında kalan şeyler gözükmüyor.

ne olabilir bunun nedeni. nette araştırdım bir çözüm bulamadım

Her sey kullandiginiz arayuz (GUI) kutuphanesine bagli.

tkinter ile düzenledim arayüzü. evet ondan olduğunu düşünüyorum bende ama tam olarak sebebi ne olabilir

belirli bir çözünürlük ile denediniz mi ? örneğin …geometry = (“600x400”) gibi belkide windowsun çözünürlüğü ile alakalı da olabilir. yada arayüzü pencereye sığdırmak için başka bir yol deneyebilirsiniz. veya expand=true, fill=“both” gibi. gui nasıl olduğunu bilmediğim için bu kadar yardım edebilirim

Sağol öneri için. Denedim şimdi hem bunu hem farklı farklı. hem de bilgisayarınkiyle aynını denedim bilgisayarda 1366x662 idi. sonra bilgisayarı düşürdüm 600x400 vb diğerlerine.

hala aynı gözüküyor. çıldıracam. o kadar uğraştım en son noktada başıma gelene bak. acaba virtual machine den mi kaynaklanıyor. kod paylasabiliyor muyuz burda göndereyim burdan kodu deneyin lütfen

expand fill bunların buton frame label içinde kullanıldığını biliyorum. tamamıyle bir pencere için nasıl kullanılıyor Kemal_Abdullah_Saydu

Kodu doğru şekilde paylaşırsanız, işyerindeki bilgisyarda (windows) deneyip ekran görüntüsü paylaşabilirim.

https://codeshare.io/X8Qv8o

buraya koydum. teşekkür ederim

bu normalde görünmesi gereken. alttaki entreyler ve butonlar çıkmadı windowsda

Bende (Ubuntu 22.04.3, Xfce 4.16) boyle gozukuyor

Cagdas GUI kutuphanelerinde widget’lar “sola yapissin, saga dogru uzasin” seklinde baglanti ve uzama noktalariyla birbirlerine bagli diziliyorlar. Tk’da durum nasil bilmiyorum ama bu kodda boyutlar sabit gibi. En azindan degisen pencere boyutuna bagli calissa, degisen widget boyutlarina da ayak uydurabilir.

Baska bir opsiyon da mutlak koordinat ve boy kullanmaya devam etmek, fakat hepsini bir skaler s ile carpmak. Orijinal cozunurluk veya pencere boyunda s = 1.0. Cozunurluk/boyut buyuyup kuculdukce bu sayi da buyuyuk kuculuyor; gorunen her seyin boyutunu goreceli olarak kucultuyor.


Problemden alakasiz fakat kodu gordugum icin soylemeden gecemeyecegim, array ve loop kullanarak tekrarlarin engellenmesi kodu cok daha okunur ve degistirilebilir yapacaktir.

1 Beğeni

bu bahsettiğiniz ölçeklendirme ile ilgili örnek verir misiniz. internetten aradım bulamadım.

Evet karmaşık çok fazla fonksiyon tanımladım. Ben buna baslarken araştırma yaptım ilk basta zorlandım dediğiniz seyleri yapmam gerektiğini okudum ancak beceremedim. Bu şekilde daha az karmaşık geldi. Çünkü çok fazla veri girişi yapılacak bir program. kafam karışmasın diye her bir hesaplama için ayrı bir fonksiyon tanımlamak daha kolay geldi :slight_smile: acemilik

Sanırım Bahsedilen konu “Duyarlı / Ekrana Uyan Tasarım (Responsive Design)”

Tkinter’de responsive tasarım için;

  • sticky
  • columnconfigure
  • rowconfigure
    konularını araştırmanızı tavsiye edebilirim.
    İsterseniz Handling Resize ve Padding konularını inceleyebilirsiniz.

Tkinter konusunda araştırma yapmak isteyenlere TkDocs Tutorial adresini önerebilirim.

Kodunuzun Linux sistemimdeki (Pop!_OS 22.04 LTS Gnome Sürümü 42.9, Pencere Sistemi: X11) görüntüsü aşağıdaki gibidir;

Basitce tum sayilari (koordinatlar ve boylar, font size dahil) bir olcek ile carpmaniz lazim.

Bu olcegi 1.0 yaptiginizda program eski haliyle calismali, 0.5 yaptiginizda yari boya inip 2.0 yaptiginizda iki katina cikmali. Tamsayi gereken yerde round kullanilabilir.

Daha sonra bu olcekle oynayabilirsiniz. Mesela programin tasarlandigi cozunurluk 1920x1080 ise 640x480 bir ekranda min(640/1920, 480/1080) olcegi kullanilmali. Her sistemde widget’lar ayni olmadigi icin (yukaridaki orneklerde tasma var) belki kafadan 0.95 veya 0.9 baslamak lazim. Isletim sistemine gore de ayarlanabilir. Sistem bir kere oturtulduktan sonra deneme ve ayarlama imkani sunuyor.


Koddan rastgele ornek alirsak:

frame_sonucfwtotal.grid(row=28, column=1, padx=10, pady=10)

frame_sonucfwtotal.grid(row=28, column=1, padx=10*gui_scale, pady=10*gui_scale)

label_sonuck3_value = tk.Label(frame_sonuck3 , text="0", bg="lightblue", highlightbackground="red", highlightthickness=1,font=("ariel", 12, "bold"))

label_sonuck3_value = tk.Label(frame_sonuck3 , text="0", bg="lightblue", highlightbackground="red", highlightthickness=1,font=("ariel", round(12*gui_scale), "bold"))

root.geometry("1400x1000+300+300")

root.geometry(f"{round(1400*gui_scale))x{round(1000*gui_scale)}+{round(300*gui_scale)}+{round(300*gui_scale)}")
(Bu pencere boyu oldugu icin sabit tutmak mantikli olabilir, ama ornek olsun diye bunu da cevirdim)

Koda bakiyorum da, grid hucreleri arasindaki padding ve font boyutu disinda hic boy/pozisyon bilgisi yok galiba? Ilk bakista pozisyon sandigim sayilarin cogu hesaplamalardaki sabitler cikti.

O halde diger yontemleri denemek daha mantikli olabilir.

Edit: Dogrudan “scaling” komutu varmis bu isi yapan.

çok teşekkür ederim ilgilendiğin için. başta verdiğin o kodları uyarlamaya çalışıyordum sonradan gördüm scaling metodunu ilaç gibi geldi :slight_smile: şimdi denemeler yapacağım windows kısmında. yazacağım buraya

Kodunuzu Windows 10 Enterprise İşletim sisteminde çalıştırdığımda aşağıdaki görüntüyü elde ettim.

Entry’lere rastgele degerler girip hesapla düğmesine bastığımda, widget’lar yana doğru genişleyip/kayıp aşağıdak hale dönüştü;

1 Beğeni

Çok teşekkür ederim. ben dün scaling metodunu denedim virtual machine de evet sığıyordu ama çok daralıyordu.

simdi sizin denemenizle görüyoruz ki windows da normal görünüyor.

denemeyi yaparken baska uğrastığım bir problemi farkedip söylediniz. ben o kayma işiyle çok uğrastım ama netice bulamadım. o yüzden bıraktım dedim böyle kalsın bu da.

nasıl sabitleyebilirim bunları. ya da karakter sınırı falan getirsem olur mu. olursa nasıl getiririm.

teşekkürler

mesela4 haneli yazdığınız LCG ve VCG kısımları 2 haneden fazla olmaz. ama işte entry girişini kontrollü hale getirmem lazım. mesela ne bileyim 3 le sınırlayım LCG VCG entry lerini gibi.

tabi bu kayma durumu da var. bu kaymayı nasıl engelleyebilirim. çok uğrastım ama yapamamıştım en son vazgeçmiştim

Merhaba,

Hesap Sonuçlarının görüntüleneceği label nesnelerinin genişliğini belirlerseniz sanıyorum sorun çözülecektir.
Ancak bildiğim kadarı ile, label ve Entry’lerde belirtilen değerler pixel olarak değil, karakter sayısı olarak belitrtiliyor. Yani kod içerisine width=5, yazdığınzda, etiket (label) sadece 5 karakteri görüntüleyecektir.
(label widget’ının alabileceği height değeri de satır sayısını temsil eder. height=3 , ifadesi etiketin 3 satırlık yer işgal etmesi anlamına gelir.

örnek;

kilo = tk.Label(root, width=5, text="Kilo: ")

Böylece sonuç etiketi (label) 5 karakter genişliğinde sabitlenmiş olacak.
Sonuç daha uzun olsa da, sadece 5 karakter/hane görüntülenir.

Tabi label’da kullanılan yazıtipi ve boyutu da pencerenin genişlemesini etkiler.
Yani verdana yazıtipinin 10 puntosu ile tahoma yazıtipinin 10 puntosu aynı genişliğe sahip değildir.

Merhaba ne yaptınız çözebildiniz mi sorunu ?