버튼 생성 자동화
31932 단어 beginnersrustgtkalgorithms
![](https://s1.md5.ltd/image/08eb66c08c97c3d19dc96eb3fe5798dc.gif)
거의 다 됐는데 소수점 뒤에 한자리 이상 추가가 안됩니다. 그것을 해결하려고합니다. 무엇이든. 오늘은 분수가 아니라 알고리즘에 대해 이야기합시다. 이것이 9개의 동일한 버튼을 만드는 방법입니다. 전송되는 이름과 정보만 다릅니다.
let mut button_value = 1.0;
for iterator in 1..=9 {
let button = gtk::Button::with_label(&iterator.to_string());
let mut column = 0;
let mut raw = 1;
button.connect_clicked(clone!(
@strong value_1, @strong value_2, @strong num_counter, @strong previous_operation, @strong entry,
@strong dot_counter, @strong value_1_temp =>
move |_| {
set_value(num_counter.get(), dot_counter.get(), &value_1, &value_2, button_value);
entry.insert_text(&iterator.to_string(), &mut -1);
}));
if iterator % 3 == 1 {
column = 0;
} else if iterator % 3 == 2 {
column = 1;
} else if iterator % 3 == 0 {
column = 2;
}
if iterator > 3 && iterator < 7 { raw = 2 }
else if iterator >= 7 && iterator <= 9 { raw = 3 }
grid.attach(&button, column, raw, 1, 1);
button_value += 1.0;
}
아름답고 간결합니다. 나는 그것이 개선 될 수 있다고 확신하지만.
따라서 동일한 버튼을 아홉 개 만들지 않아야 합니다.
let button_1 = gtk::Button::with_label("1");
let button_2 = gtk::Button::with_label("2");
let button_3 = gtk::Button::with_label("3");
let button_4 = gtk::Button::with_label("4");
let button_5 = gtk::Button::with_label("5");
let button_6 = gtk::Button::with_label("6");
let button_7 = gtk::Button::with_label("7");
let button_8 = gtk::Button::with_label("8");
let button_9 = gtk::Button::with_label("9");
let button_0 = gtk::Button::with_label("0");
button_1.connect_clicked(clone!(
@strong value_1, @strong value_2, @strong num_counter, @strong previous_operation, @strong entry,
@strong dot_counter, @strong value_1_temp =>
move |_| {
set_value(num_counter.get(), dot_counter.get(), &value_1, &value_2, 1.0);
entry.insert_text("1", &mut -1);
}));
button_2.connect_clicked(clone!(
@strong value_1, @strong value_2, @strong num_counter, @strong previous_operation, @strong entry,
@strong dot_counter, @strong value_1_temp =>
move |_| {
set_value(num_counter.get(), dot_counter.get(), &value_1, &value_2, 2.0);
entry.insert_text("2", &mut -1);
}));
button_3.connect_clicked(clone!(
@strong value_1, @strong value_2, @strong num_counter, @strong previous_operation, @strong entry,
@strong dot_counter, @strong value_1_temp =>
move |_| {
set_value(num_counter.get(), dot_counter.get(), &value_1, &value_2, 3.0);
entry.insert_text("3", &mut -1);
}));
button_4.connect_clicked(clone!(
@strong value_1, @strong value_2, @strong num_counter, @strong previous_operation, @strong entry,
@strong dot_counter, @strong value_1_temp =>
move |_| {
set_value(num_counter.get(), dot_counter.get(), &value_1, &value_2, 4.0);
entry.insert_text("4", &mut -1);
}));
button_5.connect_clicked(clone!(
@strong value_1, @strong value_2, @strong num_counter, @strong previous_operation, @strong entry,
@strong dot_counter, @strong value_1_temp =>
move |_| {
set_value(num_counter.get(), dot_counter.get(), &value_1, &value_2, 5.0);
entry.insert_text("5", &mut -1);
}));
button_6.connect_clicked(clone!(
@strong value_1, @strong value_2, @strong num_counter, @strong previous_operation, @strong entry,
@strong dot_counter, @strong value_1_temp =>
move |_| {
set_value(num_counter.get(), dot_counter.get(), &value_1, &value_2, 6.0);
entry.insert_text("6", &mut -1);
}));
button_7.connect_clicked(clone!(
@strong value_1, @strong value_2, @strong num_counter, @strong previous_operation, @strong entry,
@strong dot_counter, @strong value_1_temp =>
move |_| {
set_value(num_counter.get(), dot_counter.get(), &value_1, &value_2, 7.0);
entry.insert_text("7", &mut -1);
}));
button_8.connect_clicked(clone!(
@strong value_1, @strong value_2, @strong num_counter, @strong previous_operation, @strong entry,
@strong dot_counter, @strong value_1_temp =>
move |_| {
set_value(num_counter.get(), dot_counter.get(), &value_1, &value_2, 8.0);
entry.insert_text("8", &mut -1);
}));
button_9.connect_clicked(clone!(
@strong value_1, @strong value_2, @strong num_counter, @strong previous_operation, @strong entry,
@strong dot_counter, @strong value_1_temp =>
move |_| {
set_value(num_counter.get(), dot_counter.get(), &value_1, &value_2, 9.0);
entry.insert_text("9", &mut -1);
}));
button_0.connect_clicked(clone!(
@strong value_1, @strong value_2, @strong num_counter, @strong previous_operation, @strong entry,
@strong dot_counter, @strong value_1_temp =>
move |_| {
set_value(num_counter.get(), dot_counter.get(), &value_1, &value_2, 0.0);
entry.insert_text("0", &mut -1);
}));
grid.attach(&button_1, 0, 1, 1, 1);
grid.attach(&button_2, 1, 1, 1, 1);
grid.attach(&button_3, 2, 1, 1, 1);
grid.attach(&button_4, 0, 2, 1, 1);
grid.attach(&button_5, 1, 2, 1, 1);
grid.attach(&button_6, 2, 2, 1, 1);
grid.attach(&button_7, 0, 3, 1, 1);
grid.attach(&button_8, 1, 3, 1, 1);
grid.attach(&button_9, 2, 3, 1, 1);
grid.attach(&button_0, 1, 4, 1, 1);
오, 그래, 그게 바로 내가 한 일이야!
부끄러워!
팁을 주신 Alaksandr Petrosyan에게 감사드립니다.
Btw: 이것은 처음에 쉼표 뒤에 숫자를 추가하는 문제가 어떻게 생겼는지입니다.
![](https://s1.md5.ltd/image/be5e653758fb4fbf32036cdd78ee7b9c.png)
GTK + 계산은 식은 죽 먹기가 아닙니다.
Reference
이 문제에 관하여(버튼 생성 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/antonov_mike/automating-button-creation-3caj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)