23 Gtk4 ตอน 3, GtkListBox

Yothin Inbanleng
1 min readJan 2, 2024

การสร้างรายการ หรือ List นั้นใน Gtk จะมี GtkListBox อยู่ แต่รูปแบบการใช้งานนั้นจะแตกต่างจากเวอร์ชันเก่าด้วย Gtk4 ไม่มีคำสั่ง gtk_container_add แล้ว จึงต้องใช้ api ของออบเจกต์นั้นๆ แทน โดยปกติก็ใช้ _set_child () แทน ลองดูจากตัวอย่างในบทความนี้ แล้วค่อยพิจารณาตามไปจะช่วยให้เข้าใจได้ง่ายขึ้น

ในการเขียนโปรแกรมด้วย gtk4 นั้นจะสร้าง GtkApplicationWindow และเอาไปไว้ใน activate ของระบบแทนดังได้อธิบายในตอนที่ 1

ตัวอย่างโปรแกรมแสดงรายการด้วย GtkListBox

ทีนี้ลองดูตัวอย่างโปรแกรมส่วนของ activate จะมีการสร้าง window ผ่าน gtk_application_window_new แล้วกำหนดชื่อและขนาดเริ่มต้น

ในบรรทัดที่ 10 เราจะสร้าง listbox จากคำสั่ง gtk_list_box_new() และกำหนดให้ listbox เป็นออบเจ็กต์ลูกของ window ในบรรทัดที่ 11 โดยในส่วนนี้ถ้าเป็นเวอร์ชันเก่าเราจะใช้ gtk_container_add (GTK_CONTAINER (window), listbox) แต่คำสั่งนี้ได้ถูกยกเลิกไปในเวอร์ชัน 4

บรรทัดที่ 14–21 เป็นการวนรอบเพื่อสร้างรายการใน listbox โดยกำหนดให้ label_text มีข้อความเป็น Item 1 — Item 5

บรรทัดที่ 15 เป็นการสร้างลาเบลเพื่อบรรจุข้อความ Item ตามด้วยลำดับของ i โดยใช้ g_strdup_printf เพื่อรวมเอาข้อความกับตัวเลขเข้าด้วยกัน วิธีการนี้จะมีการจองพื้นที่หน่วยความจำ ดังนั้นต้องคืนหน่วยความจำด้วยคำสั่ง g_free (label_text) ในบรรทัดที่ 18

บรรทัดที่ 16 เป็นการสร้าง row เพื่อเอาไปบรรจุใน gtk_list_box ด้วยฟังค์ชัน gtk_list_box_row_new()

บรรทัดที่ 17 เป็นการสร้างลาเบลโดยกำหนดข้อความจาก label_text ที่สร้างขึ้นในบรรทัด 15

บรรทัดที่ 19 เพิ่มข้อความจาก label ลงไปใน gtk_list_box_row โดยใช้ _set_child () ตรงนี้ต้องแปลง row ให้เป็น GtkListBoxRow เสียก่อนด้วยมาโคร GTK_LIST_BOX_ROW()

โดยมีรูปแบบการใช้งานดังนี้

void
gtk_list_box_row_set_child (
GtkListBoxRow* row,
GtkWidget* child
)

ใช้เพิ่ม child เข้าไปใน row ในที่นี้เพิ่มข้อความ (label) เข้าไปใน row ในที่นี้กำหนดชื่อเป็น row

บรรทัดที่ 20 เพิ่ม row เข้าไปใน listbox ด้วยคำสั่ง gtk_list_box_insert โดยมีรูปแบบดังนี้

void
gtk_list_box_insert (
GtkListBox* box,
GtkWidget* child,
int position
)

ใช้เพื่อเพิ่มข้อความ (child) ลงใน กล่องของ listbox (box) ในตำแหน่งที่กำหนด (position) ถ้าให้ต่อท้ายเสมอ กำหนดเป็น -1

Insert the child into the box at position

การใช้งาน gtk_list_box นั้นก็มีตามตัวอย่างและคำอธิบายด้านบน ลองอ่านแล้วดูตัวอย่างตามไปด้วยนะครับ…

ตัวอย่างโปรแกรมสร้าง gtk_list_box

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Yothin Inbanleng
Yothin Inbanleng

Written by Yothin Inbanleng

สนใจเรียนรู้โดยเฉพาะการเขียนโปรแกรมด้านฐานข้อมูล ไมโครคอนโทรเลอร์ และงานอิเลกโทรนิคส์ ส่วนด้านอื่นๆ ชอบศึกษาประวัติศาสตร์, ถ่ายรูป,ᨲᩫ᩠ᩅᨾᩮᩥ᩠ᨦ, ธรรมะและการบริหาร

No responses yet

Write a response