Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: tkinter windows και linux

tkinter windows και linux 6 Χρόνια 1 Μήνας πριν #5060

  • cps
  • Το Άβαταρ του/της cps
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 56
Καλησπέρα, έφτιαξα μια φόρμα σε python3 με tkinter σε λειτουρικό linux mint, όταν όμως την μετέφερα στα windows 8 (Tα λειτουργικά στα οποία αναφέρομαι είναι εγκατεστημένα στον ίδιο υπολογιστή) παρατήρησα ότι είχε διαφορές στο μέγεθος και στη θέση της στην οθόνη, στα windows 8 φαίνεται μεγαλύτερη από ό,τι στο linux mint και όχι στο κέντρο. Η φόρμα θέλω να έχει ορισμένο μήκος και πλάτος, χωρίς να μπορεί να αυξομειωθεί. Ο κώδικας που έχω γράψει είναι αυτός
#!/usr/bin/env python3
from tkinter import*
import os
 
root=Tk()
 
root.title('παράδειγμα')
root.geometry('+300+50')
root.minsize(width=800, height=500)
root.maxsize(width=800, height=500)
root.configure(background='#fff')
 
 
root.mainloop()

Υπάρχει κάποιος τρόπος να γραφτεί ο κώδικας, ώστε να μην επηρεάζεται το αποτέλεσμα από το λειτουργικό σύστημα. Υπ'όψιν ότι και το linux mint και τα windows 8 είναι 64.bit.
Ευχαριστώ εκ των προτέρων
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

tkinter windows και linux 6 Χρόνια 1 Μήνας πριν #5061

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Σε γενικά πλαίσια η διαφορά προκύπτει, από τη διαχείριση της οθόνης από το κάθε λειτουργικό σύστημα, καθώς και την ανάλυση, γραμματοσειρά και άλλα.
Μια καλή πρακτική είναι να υπολογίζεις τις διαστάσεις οθόνης - παραθύρου και να τοποθετείς το παράθυρό σου.

Ένα παράδειγμα πάνω στον κώδικά σου:

#!/usr/bin/env python3
from tkinter import*
import os
 
root=Tk()
 
root.title('παράδειγμα')
# root.geometry('+300+50')
root.minsize(width=800, height=500)
root.maxsize(width=800, height=500)
root.configure(background='#fff')
 
x = (root.winfo_screenwidth() - 800)  # Πλάτος
root.geometry("+{}+50".format(int(x/2)))  # Εδώ τοποθετείται στη μέση οριζόντια και 50 από πάνω.
# y = (root.winfo_screenheight() - 500)  # Ύψος
# root.geometry("+{}+{}".format(int(x/2), int(y/2)))  # Εδώ τοποθετείται στη μέση οριζόντια και κάθετα.

root.update_idletasks()
 
 
# Εκτυπώσεις διαστάσεων θέσεων.
print(root.winfo_screenwidth(), root.winfo_width(),root.winfo_height(), x)
print(root.wm_geometry())
 
root.mainloop()
Γράφω σε Python 3
Τελευταία διόρθωση: 6 Χρόνια 1 Μήνας πριν από kamar. Αιτία: Προσθήκη σχολίων στον κώδικα
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": cps

tkinter windows και linux 6 Χρόνια 1 Μήνας πριν #5063

  • Αποστόλης
  • Το Άβαταρ του/της Αποστόλης
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 148
  • Ληφθείσες Ευχαριστίες 24
Αν και αυτο που αναφέρει ο kamar παραμένει η καλύτερη αλλά και πιο μπελαλίδικη λύση, μπορείς να πειραματιστείς με ποσοστά για το μέγεθος και με το wm_attributes για κεντράρισμα.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": cps

tkinter windows και linux 6 Χρόνια 1 Μήνας πριν #5065

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Αποστόλης έγραψε:
Αν και αυτο που αναφέρει ο kamar παραμένει η καλύτερη αλλά και πιο μπελαλίδικη λύση, μπορείς να πειραματιστείς με ποσοστά για το μέγεθος και με το wm_attributes για κεντράρισμα.

Νομίζω, πως αυτό που προτείνεις, είναι πιο περίπλοκο. Αν διαβάσεις την τεκμηρίωση, θα δεις ότι δεν ισχύουν όλες οι ρυθμίσεις για όλα τα λειτουργικά, που συνάδει με τα γραφόμενα στην ανάρτησή μου.
Άρα θα πρέπει να γραφεί κώδικας για κάθε λειτουργικό χωριστά (και για κάθε window manager αν μιλάμε για Linux) να δοκιμαστεί και κατά την εκκίνηση του script, να ελέγχεται σε ποιο λειτουργικό σύστημα «τρέχει».
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

tkinter windows και linux 6 Χρόνια 1 Μήνας πριν #5067

  • cps
  • Το Άβαταρ του/της cps
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 56
Ευχαριστώ πολύ για τη βοήθεια
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

tkinter windows και linux 6 Χρόνια 1 Μήνας πριν #5069

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
cps έγραψε:
Ευχαριστώ πολύ για τη βοήθεια

Αν θέλεις, γράψε τι λύση βρήκες.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

tkinter windows και linux 6 Χρόνια 1 Μήνας πριν #5070

  • cps
  • Το Άβαταρ του/της cps
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 56
Πριν ρωτήσω είχα ψάξει στο google και βοηθούμενος από την απάντηση που μου έδωσες τελικά κατέληξα σε αυτό, αν θες μπορείς να μου πεις αν είναι σωστό.
#!/usr/bin/env python3
from tkinter import*
import os
 
root=Tk()
 
root.title('παράδειγμα')
 
x = (root.winfo_screenwidth() - 1000)
root.geometry("+{}+50".format(int(x/2)))
root.resizable(0, 0)
 
root.configure(background='#fff')
 
root.mainloop()

Από ό,τι είδα τα (0,0) μπορούν να γραφτούν και ως (False,False) ο ρόλος του είναι να μην αφήνουν τη φόρμα να αυξομειωθεί. Επιπλέον η φόρμα και στα δύο λειτουργικά εμφανίζεται ακριβώς στις διαστάσεις που πρέπει. Βοηθούμενος τώρα και από τη δική σου απάντηση εμφανίζω τη φόρμα στο σημείο που θέλω στην οθόνη του υπολογιστή.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

tkinter windows και linux 6 Χρόνια 1 Μήνας πριν #5071

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Φαίνεται σωστό. Το 1000 φαντάζομαι είναι το πλάτος της φόρμας. Καλό είναι να το
δώσεις ρητά στον geometry manager.

Επίσης το root.update_idletasks(), δίνει το χρόνο στον window manager να κάνει όλους τους απαραίτητους χειρισμούς και να εμφανιστεί σωστά το παράθυρο. Ειδικά αν υπάρχουν πολλά widgets.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

tkinter windows και linux 6 Χρόνια 1 Μήνας πριν #5075

  • Αποστόλης
  • Το Άβαταρ του/της Αποστόλης
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 148
  • Ληφθείσες Ευχαριστίες 24
kamar έγραψε:
Αποστόλης έγραψε:
Αν και αυτο που αναφέρει ο kamar παραμένει η καλύτερη αλλά και πιο μπελαλίδικη λύση, μπορείς να πειραματιστείς με ποσοστά για το μέγεθος και με το wm_attributes για κεντράρισμα.

Νομίζω, πως αυτό που προτείνεις, είναι πιο περίπλοκο. Αν διαβάσεις την τεκμηρίωση, θα δεις ότι δεν ισχύουν όλες οι ρυθμίσεις για όλα τα λειτουργικά, που συνάδει με τα γραφόμενα στην ανάρτησή μου.
Άρα θα πρέπει να γραφεί κώδικας για κάθε λειτουργικό χωριστά (και για κάθε window manager αν μιλάμε για Linux) να δοκιμαστεί και κατά την εκκίνηση του script, να ελέγχεται σε ποιο λειτουργικό σύστημα «τρέχει».

Σε ποιές ρυθμίσεις αναφέρεσαι; Το width = 40% δεν νομίζω οτι είναι τόσο περίπλοκο.
Αν αναφέρεσαι στο attributes, δεν ξέρω. Πάντως σε όλες τις περιπτώσεις που το χρησιμοποίησα δεν είχα θέμα συμβατότητας από λειτουργικό σε λειτουργικό.
Το μόνο κακό είναι οτι με αυτό τον τρόπο βάζεις το παράθυρό στο περίπου εκεί που θες κι όχι ακριβώς. Κάτι που μπορεί να είναι κακό, αναλόγως την εφαρμογή σου.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

tkinter windows και linux 6 Χρόνια 1 Μήνας πριν #5077

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Αν το θέτεις έτσι έχεις δίκιο.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.832 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου